如何在Lua中对request_uri字符串进行urldecode

时间:2013-11-29 09:16:17

标签: nginx lua

当我使用ngx.var.request_uri时,我收回一个包含%20的字符串代替空格。是否有urldecode()函数或类似解码我的字符串?

4 个答案:

答案 0 :(得分:17)

如果您使用的是nginx-lua-module ,那么您可以使用以下api。

newstr = ngx.unescape_uri(str)

你也可以看看 ngxescape_uri

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