关于URL编码的介绍
https://zh.wikipedia.org/wiki/%E7%99%BE%E5%88%86%E5%8F%B7%E7%BC%96%E7%A0%81
URL编码也叫做百分号编码
关于Lua中的模式的介绍
lua-users wiki: Patterns Tutorial
capture 介绍 Programming in Lua : 20.3
用lua实现url编码
对于一个正常比如未经编码的url地址
1.需要把中文转化成%16进制
2.空格变成+
function LuaUtils.EncodeURL(s)
s = string.gsub(s, "([^%w%.%- ])", function(c) return string.format("%%%02X", string.byte(c)) end)# 空格变成+
return string.gsub(s, " ", "+")
end
ret = string.gsub( s, pattern, rep1[, n] );
当参数n省略,源对象包含的所有模式串都转换成替换串
上面的例子种就是省略了n
然后rep1用的是函数
1.string.gsub(第一个参数是源字符串;第二个参数是匹配模式,即去找符合的模式的字串;第三个参数是替换的字串,这里用的是自定义函数,也就是先对找到的符合模式的字串进行一个处理,再进行替换。
2.匹配模式:"([^%w%.%- ])"————人话:不是字母数字-.空格
%w 代表英文字母和数字 represents all alphanumeric characters.
%. 代表 . 这个符号
%- 代表 - 这个符号
最后还有一个空格
[] 表示里面是一组模式多个模式
^ 在[]中表示代表否定列出来的一组模式
3.自定义函数:function(c) return string.format("%%%02X", string.byte(c)) end
对满足上述匹配的字符取其字节(utf8)码,转为16进制,并用两位表示
%%:表示%这个符号
%02X:表示以十六进制形式输出,不足两位,前面补0输出