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

转载于:https://my.oschina.net/chrisforbt/blog/504889

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值