URL一般只能由字母、数字、$ - _ . + ! * ' ( ) 等一些字符构成。那么当URL中需要用到汉字时怎么办,譬如有这样的URL: "www.test.com/search?name=张三",此时,只有通过将URL进行编码的方式进行传递了。
Javascript编/解码方法:
1、escape <----> unescape
2、encodeURI <----> decodeURI
3、encodeURIComponent <----> decodeURIComponent
如果对上面的URL(www.test.com/search?name=张三)进行编码的话。
1、escape 编码后生成:"www.test.com/search%3Fname%3D%u5F20%u4E09"
2、encodeURI 编码后生成:"www.test.com/search?name=%E5%BC%A0%E4%B8%89"
3、encodeURIComponent 编码后生成:"www.test.com%2Fsearch%3Fname%3D%E5%BC%A0%E4%B8%89"
可以看出,三者的编码结果不尽相同,其中 escape 对除了ASCII字母、数字、标点符号 @ * _ + - . / 以外的字符进行编码,而编码生成的是Unicode编码值; encodeURI 对除了ASCII字母、数字、标点符号 @ * _ + - . / ; ? : & = + $ , # 以外的字符进行编码,而编码生成的是utf-8的编码值; encodeURIComponent 对ASCII字母、数字、标点符号 * _ + - . 以外的字符进行编码,而编码生成的是utf-8的编码值。
三种编码方式中 escape 用的较少了,而阮一峰如是说: encodeURI 和 encodeURIComponent 之间比较大的区别是后者用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。但除了上面说的 encodeURIComponent 要比 encodeURI 编码的字符多一些,我还真没看出来他说的这个区别在哪里。要说这两种哪种较好,我个人更倾向于 encodeURI ,因为经过它编码后,我还能清楚的看出来这个 URL 带有查询条件的。所以,我需要用的时候,应该非 encodeURI 莫选了。
more:
[url=http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526687.html] escape()、encodeURI()、encodeURIComponent()区别详解 [/url]
[url=www.ruanyifeng.com/blog/2010/02/url_encoding.html] 关于URL编码 [/url]
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐