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 相关文章推荐
用正则获取指定路径文件的名称
Feb 27 Javascript
犀利的js 函数集合
Jun 11 Javascript
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
Oct 26 Javascript
20个非常有用的PHP类库 加速php开发
Jan 15 Javascript
js 键盘记录实现(兼容FireFox和IE)
Feb 07 Javascript
webapp框架AngularUI的demo改造之路
Dec 21 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
Jul 27 Javascript
基于Bootstrap+jQuery.validate实现表单验证
May 30 Javascript
概述如何实现一个简单的浏览器端js模块加载器
Dec 07 Javascript
详解node如何让一个端口同时支持https与http
Jul 04 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
Sep 15 Javascript
JavaScript 判断数据类型的4种方法
Sep 11 Javascript
在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中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
2019/06/14 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
2010/11/16 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
JavaScript实现开关等效果
2017/09/08 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
ES6入门教程之let、const的使用方法
2019/04/13 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
关于python的list相关知识(推荐)
2017/08/30 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
Django进阶之CSRF的解决
2018/08/01 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
兰兰过桥教学反思
2014/02/08 职场文书
自荐书范文范例
2014/02/13 职场文书
党支部换届选举方案
2014/05/08 职场文书
开工典礼策划方案
2014/05/23 职场文书
2016年国陪研修感言
2015/11/18 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫
Python pyecharts绘制条形图详解
2022/04/02 Python