JS中URL中的特殊字符问题:escape,encodeURI,encodeURIComponent
来源:互联网 发布:淘宝虚拟网店怎么优化 编辑:程序博客网 时间:2024/05/29 17:49
URI 编码方法
Global 对象的 encodeURI()和encodeURIComponent()方法可以对URI(Uniform ResourceIdentifiers,通用资源标识符)进行编码,以便发送给浏览器。有效的URI中不能包含某些字符,例如空格。而这两个URI编码方法就可以对URI 进行编码,它们用特殊的 UTF-8编码替换所有无效的字符,从而让浏览器能够接受和理解。其中,encodeURI()主要用于整个URI(例如,http://www.wrox.com/illegal value.htm),而encodeURIComponent()主要用于对URI中的某一段(例如前面URI 中的 illegal value.htm)进行编码。
它们的主要区别在于, encodeURI()不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和井字号;而encodeURIComponent()则会对它发现的任何非标准字符进行编码。来看下面的例子。
//"http://www.wrox.com/illegal%20value.htm#start"
alert(encodeURI(uri));
//"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start"
alert(encodeURIComponent(uri));
使用 encodeURI()编码后的结果是除了空格之外的其他字符都原封不动,只有空格被替换成了%20。而encodeURIComponent()方法则会使用对应的编码替换所有非字母数字字符。这也正是可以对整个URI使用encodeURI(),而只能对附加在现有URI后面的字符串使用encodeURIComponent()的原因所在。一 般 来 说 , 我 们 使 用encodeURIComponent()方 法 的 时 候 要 比 使 用encodeURI()更多,因为在实践中更常见的是对查询字符串参数而不是对基础URI进行编码。与encodeURI()和encodeURIComponent()方法对应的两个方法分别是decodeURI()和decodeURIComponent()。其中,decodeURI()只能对使用encodeURI()替换的字符进行解码。
例如,它可将%20替换成一个空格,但不会对%23作任何处理,因为%23表示井字号(#),而井字号不是使用encodeURI()替换的。同样地,decodeURIComponent()能够解码使用encodeURIComponent()编码的所有字符,即它可以解码任何特殊字符的编码。来看下面的例子:
var uri = "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start";
//http%3A%2F%2Fwww.wrox.com%2Fillegal value.htm%23start
alert(decodeURI(uri));
//http://www.wrox.com/illegal value.htm#start
alert(decodeURIComponent(uri));
这里,变量 uri包含着一个由encodeURIComponent()编码的字符串。在第一次调用decodeURI()输出的结果中,只有%20被替换成了空格。而在第二次调用decodeURIComponent()输出的结果中,所有特殊字符的编码都被替换成了原来的字符,得到了一个未经转义的字符串(但这个字符串并不是一个有效的URI)。
URI 方法 encodeURI()、encodeURIComponent()、decodeURI()和decodeURIComponent()用于替代已经被ECMA-262第3版废弃的escape()和unescape()
方法。 URI 方法能够编码所有Unicode字符,而原来的方法只能正确地编码ASCII字符。
因此在开发实践中,特别是在产品级的代码中,一定要使用 URI 方法,不要使用escape()和unescape()方法
- JS中URL中的特殊字符问题:escape,encodeURI,encodeURIComponent
- JS中URL中的特殊字符问题:escape,encodeURI,encodeURIComponent
- JS中URL中的特殊字符问题:escape,encodeURI,encodeURIComponent
- JS中URL中的特殊字符问题:escape,encodeURI,encodeURIComponent
- JS中URL中的特殊字符问题(escape,encodeURI,encodeURIComponent)
- JS中URL中的特殊字符问题(escape,encodeURI,encodeURIComponent)
- JS中URL中的特殊字符问题:escape,encodeURI,encodeURIComponent(转)
- JS中URL中的特殊字符问题:escape,encodeURI,encodeURIComponent(转)
- URL中的特殊字符问题escape,encodeURI,encodeURIComponent
- JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解
- JS中的escape() & encodeURI() & encodeURIComponent()
- js中escape,encodeURI,encodeURIComponent
- js 中escape encodeURI encodeURIComponent
- js中escape,encodeURI,encodeURIComponent
- js中escape,encodeURI,encodeURIComponent
- url字符编码(encodeURI、encodeURIComponent、escape)
- JS URL转码escape() encodeURI() encodeURIComponent()
- JS URL转码escape() encodeURI() encodeURIComponent()
- 使用jquery解决ie6、7、8、9版本不支持placeholder的问题。
- [转]iOS获取UDID问题 (代码获取不到) UDID/UUID/IDFA/IDFV详解
- 配置Groovy开发环境
- 关于spring整合mybatis的扫描器的配置问题
- 嵌入式Linux系统设计--第五章:Linxu程序开发简介
- JS中URL中的特殊字符问题:escape,encodeURI,encodeURIComponent
- Linux for Ubuntu用gdebi安装deb文件
- Afnetworking设置超时时间无效
- Linux安装MySQL的两种方法 先卸载之前版本
- 搜索-H
- 关于NoSQL与SQL的区别
- 浅谈GAN生成对抗网络
- 基于物理的渲染—基于球面调和基的实时全局光照明
- Pyunit源码笔记之二 主函数import,初始化loader和流程概览