2016-11-12 14 views
1

Also mit Lua verwende ich es, um die HTML-Ausgabe von einer Antwort-Seite von einem Nginx-Server zu ersetzen. Um einen Wert = "*" HTML-Tag leer zu machen.Lua Nginx ersetzt HTML-Ausgabe

Das Problem ist, ich bleibe das Ende meiner HTML verlieren, nachdem Lua die Zeichenfolge ersetzt und macht, was immer zwischen den Zitaten der Rest meines HTML in der gleichen Zeile leer ist, nachdem das weg ist.

Lua Code:

body_filter_by_lua_block { 
local body = ngx.arg[1] --Put body into local var 
local htmlvaluetomakeempty = "id=\"username\" value=" 
local loginpagematch = ngx.re.match(body, "" .. htmlvaluetomakeempty .. "\"(?:.*)\"") --Search through body to see if our html match is found 
if loginpagematch then --If not empty 
body = ngx.re.gsub(body, "" .. htmlvaluetomakeempty .. "\"(?:.*)\"", "" .. htmlvaluetomakeempty .. "\"\"") --.. loginpagematch["match"]) 
ngx.arg[1] = body 
end 
} 

HTML-Code, dass Lua ersetzen wird:

<div class="login-fields"><label id="username-lbl" for="username" class="">User Name</label> <input type="text" name="username" id="username" value="test" class="validate-username" size="25"/></div> 

Nach Lua ausgeführt wurde und modifiziert, um die Körper Inhalt der Ausgang

wie diese sieht
<div class="login-fields"><label id="username-lbl" for="username" class="">User Name</label> <input type="text" name="username" id="username" value=""/></div> 

Das Problem ist, dieser HTML-Code auch für einen unbekannten Grund

class="validate-username" size="25" 

Es macht erfolgreich, nachdem es id="username" value="" leer, aber ich verlieren, was immer HTML kam zu entfernt worden ist, und ich bin nicht sicher, warum.

+2

Wahrscheinlich nicht gierige Spiel in gsub erforderlich ist: ' "\"(?.? *) \ "" ' –

+0

Danke, dass du richtig bist, habe meine Regex geändert, um das zu erreichen und das Problem wurde gelöst: D <3 – C0nw0nk

Antwort

1

Regex zu manipulieren HTML ist in der Regel eine verlorene Ursache. Auch Leerzeichen in der Eingabe können das Skript komplett unterbrechen. Es wäre ratsam, einfach eine HTML-Parsing-Bibliothek wie lua-gumbo zu verwenden.

Das folgende Beispiel das input#username Element finden würde, und legen Sie es value Attribut auf die leere Zeichenfolge ist:

local gumbo = require "gumbo" 

local input = [[ 
<div class="login-fields"> 
    <label id="username-lbl" for="username" class="">User Name</label> 
    <input type="text" name="username" id="username" value="test" class="validate-username" size="25"/> 
</div> 
]] 

local document = assert(gumbo.parse(input)) 
local element = assert(document:getElementById("username")) 
element:setAttribute("value", "") 
local output = assert(document:serialize()) 
io.write(output, "\n")