function escape(s) s=string.gsub(s,"([&=+%c])",function(c) return string.format("%%%02X",string.byte(c)) end ) s=string.gsub(s," ","+") return s end
第一个gsub , [ ]中 匹配 & = + 及其他符号 %c 中的任意一个 替换为 格式化成 以 % 开头的(%%) %02X 两位不足补0 的十六进制数
第二个gsub , 匹配 空格 替换为 +
function encode(t) local s="" for k,v in pairs(t) do s = s .."&" ..escape(k).."="..escape(v) end )
以&开头,用escape转换特殊字符 将表中数据格式化为k=v的形式
t = {name='al',query='a+b=c',q='a or b'} print(encode(t)) --query=a%2Bb%3Dc&q=a+or+b&name=al
URL解码
function unescape(s) s=string.gsub(s,"+"," ") s=string.gsub(s,"%%(%x%x)",function(h) )) end) return s end
匹配 %开头的(%%) %x%x十六进制的两位数 先转成10进制 然后通过ASCLL翻译成字符