2016-11-12 6 views
1

Luaでは、Nginxサーバーの応答ページのHTML出力を置き換えるために使用しています。 value = "*" HTMLタグを空にするため。Lua NginxはHTML出力を置き換えます

Luaが文字列を置き換えた後で、私のHTMLの終わりが失われてしまう問題があります。

のLuaコード:

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 
} 
Luaが交換されることを

HTMLコード:

<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> 

Luaが実行され、出力はこの

ように見える体の内容を変更した後
<div class="login-fields"><label id="username-lbl" for="username" class="">User Name</label> <input type="text" name="username" id="username" value=""/></div> 

問題は、このHTMLコードはまた、それが正常にid="username" value=""を空にしないが、私はHTMLもそれの後に来て、私はなぜわからない、これまでどのような緩い

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

不明な理由で削除されています。

+2

(:?。*?)\ "" ' –

+0

ありがとうございました。あなたは正しいですが、私の正規表現を修正してそれに合わせて問題を解決しました。D <3 – C0nw0nk

答えて

1

正規表現を使用してHTMLを操作するのは、通常は失われた原因です。入力の空白の変更でさえ、スクリプトを完全に破ることができます。 lua-gumboなどのHTML解析ライブラリを使用することをお勧めします。

次の例では、input#username要素を見つけて、それが空の文字列にvalue属性です設定します: ` "\":おそらく非欲張りマッチがGSUBに必要とされる

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") 
関連する問題