openresty如何对url进行解码

    URL编码是HTTP所使用的一种编码方式,用于在一个URL钟传送各种参数。这种编码方式会将特殊字符(如'='、'&'、'+')编码为'%<xx>'的形式,其中<xx>是字符的十六进制表示。此外,它还会将空格转化为"+"。例如,它会将字符串"a+b=c"编码为”a%2Bb+%3D+c"。最后,它会将每对参数名及其值用"="连接起来,并将每对结果name=value用"&"连接起来。例如,对于值:

    name = "a1"; query = "a+b  = c"; q="yes or no"

    会被编码为:

    "name=a1&query=a%2Bb+%3D+c&q=yes+or+no"

    现在要对这个URL进行解码,要求对编码中的每个值,及其名称作为key,保存到一个table内。一下函数完成一次基本的编码:

function unescape (s)
    s = string.gsub(s, "+", " ")
    s = string.gsub(s, "%%(%x%x)", function (h)
        return string.char(tonumber(h, 16))
       end)
    return s
 end

    用gmatch来对name=value进行解码。由于名称和值都不能包含"&"和"=",所以可以用模式"[^&=]+"来匹配它们:

cgi = {}
function decode (s)
    for name, value in string.gmatch(s, "([^&=]+)=([^&=]+)") do
        name = unescape(name)
        value = unescape(value)
         cgi[name] = value
    end
end

节选自《Lua程序设计第二版》第20章-20.5替换-20.5.1URL编码

你可能感兴趣的:(openresty如何对url进行解码)