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

时间: 2024-11-09 08:08:46

openresty如何对url进行解码的相关文章

百度移动版的url编码解码代码

1 var decode = function(m) { 2 try { 3 m = decodeURIComponent(m); 4 } catch(e) {} 5 var s = m.split("%"); 6 if (s.length > 1) { 7 s.shift(); 8 for(var i = 0; i < s.length; i++) { 9 var t = s[i]; 10 t = parseInt(t, 16); 11 t = t + 256; 12 t

iOS中URL的解码和转义问题

iOS中URL的解码和转义问题 时间:2013-03-20 09:19来源:www.chengxuyuans.com 在iOS开发中,使用NSURLConnection去请求google places api时,如果请求的url中包含中文,则返回的结果为空,URL不能被google识别.NSString *_urlString = @"http://maps.googleapis.com/maps/api/geocode/json?address=南京&sensor=true"

详解JavaScript中的Url编码/解码,表单提交中网址编码

本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数escape / unescape,encodeURI / decodeURI和 encodeURIComponent / decodeURIComponent. 预备知识 foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/ \_______

编码解码--url编码解码

url编码解码,又叫百分号编码,是统一资源定位(URL)编码方式.URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过%xx编码处理. 现在已经成为一种规范了,基本所有程序语言都有这种编码,如js:有encodeURI.encodeURIComponent,PHP有 urlencode.urldecode等.编码方法很简单,在该字节ascii码的的16进制字符前面加%. 如 空格字符,ascii码是32,对应16

ASP.NET中Url编码解码

今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码失败,查看问题发现转码的时候把“+”转成了“%”,但是解码的时候把“%”装换成了“ ”空格,最后上网查了下很多网友都遇到过这种问题, 最后把HttpUtility.UrlEncode替换成了一下的方式就OK了. var email="15586757225"; string after =

Delphi下URL汉字编码解码的两个函数

//汉字URL编码函数function URLEncode(const S: string; const InQueryString: Boolean): string;var  Idx: Integer; //逐个字符循环直至字符串结束begin  Result := '';  for Idx := 1 to Length(S) do  begin    case S[Idx] of      'A'..'Z', 'a'..'z', '0'..'9', '-', '_', '.':      

URL编码解码

ios url 编码和解码 1.url编码 ios中http请求遇到汉字的时候,需要转化成UTF-8,用到的方法是: NSString * encodingString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 2.url解码 请求后,返回的数据,如何显示的是这样的格式:%3A%2F%2F,此时需要我们进行UTF-8解码,用到的方法是: NSString *str = [model.

c# url自动解码解决方案

昨天下午易宝维护人员联系我,询问我三笔订单的状态,他们是扣费成功了,我们这还是订单待扣费状态,经过检查发现双方的签名有问题,仔细一看这三笔订单都有一个共性,用户名都包含中文,然后就对症下药... 由于易宝再扣费成功后通知我方前,对字符串用gb2312 urlencode了,而我方接口是用.net实现的,所以默认的编码格式是utf-8,所以接收到请求后就把字符串的内容用utf-8 urldecode了,导致我这边HttpUtility.UrlDecode(Request["user_name&qu

Google的URL编码解码之delphi

使用google谷歌搜索一下关键词,对应的编码如下:刀:%E5%88%80刀具:%E5%88%80%E5%85%B7刀具网:%E5%88%80%E5%85%B7%E7%9A%84 因此可见,google对URL的编码并非简单的httpencode编码,因为httpencode编码后的字符串应该是带有两个百分号的,而这个是三个百分号.多尝试一下就不难发现googleURL的编码解码规则如下: 1.编码,先UTF8编码,然后再URL编码.       使用delphi编码的方法:加入待编码原始字符串