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编码
时间: 2024-11-09 08:08:46