【问题标题】:Lua Nginx replacing HTML outputLua Nginx 替换 HTML 输出
【发布时间】:2017-03-26 17:37:51
【问题描述】:

所以我使用 Lua 来替换来自 Nginx 服务器的响应页面的 HTML 输出。为了使 value="*" HTML 标记为空。

问题是,在 Lua 替换字符串之后,我不断丢失 HTML 的结尾,并使引号之间的内容在该字符串消失后清空同一行上的其余 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 代码也因未知原因被删除了

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

它确实成功地使 id="username" value="" 为空,但我也丢失了它之后的 HTML,我不知道为什么。

【问题讨论】:

  • gsub 中可能需要非贪婪匹配:"\"(?:.*?)\""
  • 谢谢,你是对的,只是修改了我的正则表达式以匹配它并解决了问题:D

标签: html regex nginx lua


【解决方案1】:

使用正则表达式来操作 HTML 通常是一个失败的原因。甚至输入中的空格更改也会完全破坏您的脚本。建议只使用 HTML 解析库,例如 lua-gumbo

以下示例将找到 input#username 元素并将其 value 属性设置为空字符串:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-18
    • 2020-01-11
    • 2014-10-12
    • 2021-07-11
    • 1970-01-01
    • 2014-11-15
    • 2011-05-16
    • 2017-03-24
    相关资源
    最近更新 更多