Chapter 21_5.1 URL编码
URL编码是http所使用的一种编码方式,用于在一个URL中传送各种参数。该编码方式会将特殊字符("=","&","+")编码为"%<xx>"形式。
<xx>是字符的十六进制表示。此外,它还会将空格转换为"+",例如,它会将字符串"a+b = c" 编码为:"a%2Bb+%3D+c"
最后,它会将每对参数名及其值用"="连接起来,并将每对结果name = value用"&"连接起来,例如,对于值:
name="al" ; quary = "a+b = c"; q="yes or no"
会被编码为:
"name=al&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) --将%xx转换为相应的字符
return string.char(tonumber(h,))
end)
return s
end print(unescape("a%2Bb+%3D+c")) -->a+b = c
用gmatch对name = value进行解码。由于名称和值都不能包含"&"和"=",所以可以用模式"[^&=]+"来匹配它们:
cgi = {}
function decode(s)
for name,value in string.gmatch(s,"([^&=]+)=([^&=]+)") do
name = usecape(name)
value = unescape(value)
cgi[name] = value
end
end
对于每组参数,迭代器都会将捕获到的内容作为变量name和value的值。循环体内只是对两个字符串调用unescape,然后将结果保存cgi表中。
另一方面,编码函数也容易写。首先,写一个escape函数:将所有特殊字符编码为"%"并伴随该字符的十六进制码。将空格转换为"+"
function escape(s)
s = string.gsub(s,"[&=+%%%c]",function(c) --匹配"&"、"="、"+"、"%"和"%c"控制符,并用function把它转换为%xx形式。
return string.format("%%%02X",string.byte(c)) --
end)
s = string.gsub(s," ","+") --转换空格为"+"
return s
end
encode函数遍历整个待编码的table,构建出最终的结果字符串:
function encode(t)
local b = {}
for k,v in pairs(t) do
b[#b + ] = (escape(k) .. "=" .. escape(v))
end
return table.concat(b,"&")
end t = {name = "al", query = "a+b = c",q = "yes or no"}
print(encode(t)) -->q=yes+or+no&query=a%2Bb+%3D+c&name=al
以上内容来自:《Lua程序设计第二版》和《Programming in Lua third edition 》
Chapter 21_5.1 URL编码的更多相关文章
- 小白袍 -- Chapter 1.4.1.1 URL编码的理论解读
1.4.1.1 URL编码的理论解读 我们在做JavaWeb时避不过GET请求,GET请求和POST请求最大一点不同就在于参数,GET请求的参数会URL中,而POST请求的参数则会在HTTP Hea ...
- url 编码(percentcode 百分号编码)(转载)
原文地址:http://www.cnblogs.com/leaven/archive/2012/07/12/2588746.html http://www.imkevinyang.com/2009 ...
- 【原】聊一聊 url 编码问题
最近项目中遇到需要编码的一个问题,在encode和encodeURIComponent上绕了个小圈,所以打算总结一下js的编码问题,网上也有很多类似的文章,不过呢,总结出来的东西才是自己滴 为什么需要 ...
- Owin的URL编码怎么搞?以前都是HttpUtility.UrlEncode之类的,现在连system.web都没了,肿么办?
Owin的URL编码怎么搞?以前都是HttpUtility.UrlEncode之类的,现在连system.web都没了,肿么办? 编码: Uri.EscapeDataString(name) 解码: ...
- 【基础进阶】URL详解与URL编码
作为前端,每日与 URL 打交道是必不可少的.但是也许每天只是单纯的用,对其只是一知半解,随着工作的展开,我发现在日常抓包调试,接口调用,浏览器兼容等许多方面,不深入去理解URL与URL编码则会踩到很 ...
- 【阮一峰】深入研究URL编码问题及JavaScript相应的解决方案
作者: 阮一峰 日期: 2010年2月11日 一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上 ...
- delphi URL 编码的转换
先介绍一下,Delphi中处理Google的URL编码解码,其中就会明白URL编码转换的方法的 从delphi的角度看Google(谷歌)URL编码解码方式 在网上搜索了一下,似乎没有什么关于goog ...
- sed处理url编码解码=== web日志的url处理
URL 编码/解码方法(linux shell实现),方法如下: 1.编码的两种方法: admin@~ 11:14:29>echo '手机' | tr -d '\n' | xxd -plain ...
- url编码
url编码 情况1:网址路径中包含汉字 打开IE,输入网址”http://zh.wikipedia.org/wiki/春节”.注意,”春节”这两个字此时是网址路径的一部分. 查看HTTP请求的头信息, ...
随机推荐
- 【分享】LateX排版软件学习教程合集
来源于:http://www.hejizhan.com/html/xueke/416/x416_13.html LATEX2e科技排版指南.pdf 8.3 MB An Example LaTeX ...
- SharePoint 2013常用开发工具
SharePoint 2013常用开发工具分享 2014-04-01 00:59 by jv9, 589 阅读, 1 评论, 收藏, 编辑 众所周知,一款好的开发工具不仅能提高项目开发效率,而且能够协 ...
- spring mvc在普通类中获取HttpServletRequest对象
如题,需要在web.xml中配置request监听,如下 <listener> <description>spring request监听器</description&g ...
- Bootstrap3.0学习第六轮(表单)
Bootstrap3.0学习第六轮(表单) 前言 阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/aehyok/p/3404867.h ...
- 使用Entity Framework 4进行代码优先开发
[原文地址]Code-First Development with Entity Framework 4 .NET 4随带发布了一个改进版的Entity Framework(EF)- 一个位于Sy ...
- MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 三
本次改动的主要内容是实现MongoDB.Repository在MongoDB中建立索引. 建立索引主要使用MongoDB的官方驱动中EnsureIndex方法. 在MongoDB.Repository ...
- 安装使用yii-debug-toolbar,yii框架的调试插件
1github 下载yii-debug-toolbar 插件 地址:https://github.com/malyshev/yii-debug-toolbar 2. 假设yii的项目创建在了/expo ...
- MacOSX中使用NSWindow创建背景透明的窗体
1.Windows 在window上创建异形窗体必须要使用WS_EX_LAYERED样式,再调用SetLayeredWindowAttributes设置透明度或者透明颜色属性.用updatelayer ...
- jsp传值乱码解决办法
在jsp中,我们经常从数据库读取数据返回客户端,但我们常常在制作时出现乱码现象,所以我们可以用<%request.setCharacterEncoding("UTF-8"); ...
- Android 关于在Activity中监听ListView
Android 开发时,最常用的控件之一就是ListView了,而使用ListView的同时,必然需要对它设置监听器,常用的监听器有这么几个: 1. OnItemClickListener // 监听 ...