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请求的头信息, ...
随机推荐
- Object C和C#的差异
从C#到Object C,循序渐进学习苹果开发(1)--准备开发账号和开发环境 本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台开发苹果开发的一系列感想和体验历程,本系列文章是在起步 ...
- flume安装及配置
Flume安装 介绍 Flume本身的安装比较简单(flume的介绍请参考http://blog.csdn.net/rzhzhz/article/details/7448633),安装前先说明几个概念 ...
- HtmlParser的使用-爬虫学习(三)
关于这个HtmlParser的学习资料,网上真的很匮乏,这个好用的东西不要浪费啊,所以我在这里隆重的介绍一下. HtmlParser是一个用来解析HTML文件的Java包,主要用于转换盒抽取两个方面. ...
- 计算image 积分图
// testopencv.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <opencv2\opencv.hpp& ...
- 一个人开发的html整站源码分享网站就这么上线了
项目我采用了纯静态html+动态搜索的模式,就是说详情页.主页等纯静态页面,仅搜索页面采用数据库访问搜索,搜索结果分为静态和动态,如果输入的关键字是已存在的标签就静态展示,否则就动态展示,这么做的好处 ...
- Mysql--选择适合的引擎,提高操作速度
在MySQL 5.1中,MySQL AB引入了新的插件式存储引擎体系结构,允许将存储引擎加载到正在运新的MySQL服务器中 一.数据引擎简介 在MySQL 5.1中,MySQL AB引入了新的插件 ...
- ios学习笔记第三天之UI控件
- 日历插件(beta)
仿iphone日历插件(beta) 前言 小伙伴们好,很久不见了.最近工作进入正常期了,所以慢慢的悠闲的时间久没有了,所以不能每天水一篇了. 最近也在听师傅(http://home.cnblogs.c ...
- JS获取图片实际宽高
JS获取图片实际宽高,以及根据图片大小进行自适应 <img src="http://xxx.jpg" id="imgs" onload="ada ...
- ActionInvoker
ActionInvoker 还是这张图: 当ControllerFactory生成Controller实例后,这时就需要使用ActionInvoker来选择调用一个合适的Action执行.ASP.NE ...