当我使用ngx.var.request_uri
时,我收回一个包含%20的字符串代替空格。是否有urldecode()函数或类似解码我的字符串?
答案 0 :(得分:17)
答案 1 :(得分:9)
解码后的URI可以在ngx.var.uri
中找到。它不包含查询字符串,如果需要,请参阅ngx.var.query_string
。
编辑:如果你不能使用它,这是一个简单的方法来浏览Lua中的URL。
local hex_to_char = function(x)
return string.char(tonumber(x, 16))
end
local unescape = function(url)
return url:gsub("%%(%x%x)", hex_to_char)
end
使用示例:
local url = "/test/some%20string?foo=bar"
print(unescape(url)) -- /test/some string?foo=bar
但您可能应该在使用之前拆分查询字符串。
答案 2 :(得分:0)
LuaSocket具有url.unescape
实用程序。报价:
url.unescape(content)
从字符串中删除URL转义内容编码。
内容是要解码的字符串。
该函数返回解码后的字符串。
答案 3 :(得分:0)
尝试使用ngx.req
的{{1}} api
nginx-lua-module
:重写uri,仅重写路径,如果您还想替换参数,请使用ngx.req.set_uri
ngx.req.set_uri_args
:用于编码字符串ngx.escape_uri
:用于解码字符串例如:解码路径和参数
ngx.unescape_uri
参考文件:https://github.com/openresty/lua-nginx-module#ngxreqset_uri