JS对URL字符串进行编码/解码分析


Posted in Javascript onOctober 25, 2008

虽然escape()、encodeURI()、encodeURIComponent()三种方法都能对一些影响URL完整性的特殊
字符进行过滤。但后两者是将字符串转换为UTF-8的方式来传输,解决了页面编码不一至导致的乱码问
题。例如:发送页与接受页的编码格式(Charset)不一致(假设发送页面是GB2312而接收页面编码是
UTF-8),使用escape()转换传输中文字串就会出现乱码问题。
以下是JS下对URL进行编/解码的各种方法:
escape 方法:返回一个可在所有计算机上读取的编码 String 对象。
function escape(charString : String) : String
不会被此方法编码的字符: @ * / +
说明:escape 方法返回一个包含 charstring 内容的字符串值(Unicode 格式)。所有空格、标点、
重音符号以及任何其他非 ASCII 字符都用 %xx 编码替换,其中 xx 等于表示该字符的十六进制数。
例如,空格返回为“%20”。(字符值大于 255 的字符以 %uxxxx 格式存储。)
注意:escape 方法不能用来对“统一资源标识符”(URI) 进行编码。对其编码应使用 encodeURI 和
encodeURIComponent 方法。
encodeURI 方法:返回编码为有效的统一资源标识符 (URI) 的字符串。
function encodeURI(URIString : String) : String
不会被此方法编码的字符:! @ # $ & * ( ) = : / ; ? + '
说明:encodeURI 方法返回一个已编码的 URI。如果将编码结果传递给 decodeURI,则将返回初始的
字符串。encodeURI 不对下列字符进行编码:“:”、“/”、“;”和“?”。请使用
encodeURIComponent 对这些字符进行编码。
encodeURIComponent 方法:返回编码为统一资源标识符 (URI) 的有效组件的字符串。
function encodeURIComponent(encodedURIString : String) : String
不会被此方法编码的字符:! * ( ) '
说明:encodeURIComponent 方法返回一个已编码的 URI。如果将编码结果传递给
decodeURIComponent,则将返回初始的字符串。因为 encodeURIComponent 方法将对所有字符编码,
请注意,如果该字符串代表一个路径,例如 /folder1/folder2/default.html,则其中的斜杠也将被
编码,这样,当该字符串作为请求发送到 Web 服务器时它将是无效的。如果字符串中包含多个 URI
组件,请使用 encodeURI 方法进行编码。
unescape 方法:从用 escape 方法编码的 String 对象中返回已解码的字符串。
function unescape(charString : String) : String
说明:unescape 方法返回一个包含 charstring 内容的字符串值。所有以 %xx 十六进制形式编码的
字符都用 ASCII 字符集当中等效的字符代替。(以 %uxxxx 格式(Unicode 字符)编码的字符用十六
进制编码 xxxx 的 Unicode 字符代替。)
注意:unescape 方法不应用于解码“统一资源标识符”(URI)。请改用 decodeURI 和
decodeURIComponent 方法。
decodeURI 方法:返回一个已编码的统一资源标识符 (URI) 的非编码形式。
function decodeURI(URIstring : String) : String
decodeURIComponent 方法:返回统一资源标识符 (URI) 的一个已编码组件的非编码形式。
function decodeURIComponent(encodedURIString : String) : String
BTW:C#中对URL编码的方法。。。
编码:Server.UrlEncode(string)
解码:Server.UrlDecode(string) 前面三种客户端编码都可以用这个方法在后台解码。

Javascript 相关文章推荐
关于javascript中this关键字(翻译+自我理解)
Oct 20 Javascript
jQuery的attr与prop使用介绍
Oct 10 Javascript
jquery ajax属性async(同步异步)示例
Nov 05 Javascript
JS简单实现登陆验证附效果图
Nov 19 Javascript
JS遍历页面所有对象属性及实现方法
Aug 01 Javascript
Javascript中的 “&” 和 “|” 详解
Feb 02 Javascript
老生常谈js中0到底是 true 还是 false
Mar 08 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
Apr 26 Javascript
原生JS实现自定义下拉单选选择框功能
Oct 12 Javascript
vue远程加载sfc组件思路详解
Dec 25 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
Jun 11 Javascript
jquery插件实现图片悬浮
Apr 16 jQuery
在html页面中包含共享页面的方法
Oct 24 #Javascript
IE浏览器兼容Firefox的JS脚本的代码
Oct 23 #Javascript
Javascript客户端将指定区域导出到Word、Excel的代码
Oct 22 #Javascript
checkbox 多选框 联动实现代码
Oct 22 #Javascript
javascript网页关闭时提醒效果脚本
Oct 22 #Javascript
javascript Select标记中options操作方法集合
Oct 22 #Javascript
JavaScript Undefined,Null类型和NaN值区别
Oct 22 #Javascript
You might like
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
PHP使用函数用法详解
2018/09/30 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
JavaScript 的继承
2011/10/01 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
layui导航栏实现代码
2017/05/19 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
Python实现发送email的几种常用方法
2014/08/18 Python
Python isinstance函数介绍
2015/04/14 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
10款最好的Python开发编辑器
2019/07/03 Python
使用python实现画AR模型时序图
2019/11/20 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
幼儿园安全生产月活动总结
2014/07/05 职场文书
医药销售自我评价200字
2014/09/11 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
导游词之任弼时故居
2020/01/07 职场文书
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android