首页 > 代码库 > 编码解码
编码解码
概述
对于uri的编解码,在js中有3对函数,分别是escape/unescape,encodeURI/decodeURI,encodeURIComponent/decodeURIComponent。
它们的适用范围不同,而且遵循的编码规范也不同。
对于上述函数而言,所有的ASCII的字符编码相同,采用%XX的形式。而对于unicode字符,escape编码形式为%uXXXX,而其余两个函数
则先将unicode字符按照utf-8对其进行编码,然后继续进行uri编码(百分号)。对于中文字符,每个字符用urf-8编码则为3个字节,然后在
每个字节前面加上%即可。如:‘中国’按照urf-8编码为"0xE40xB80xAD0xE50x9B0xBD",进而对该6个字节进行百分号编码:
"%E4%B8%AD%E5%9B%BD"。
区别
这三对函数的安全字符(即需要编码的字符)范围也不同,如下所示:
- escape(69个):*/@+-._0-9a-zA-Z
- encodeURI(82个):!#$&‘()*+,/:;=?@-._~0-9a-zA-Z
- encodeURIComponent(71个):!‘()*-._~0-9a-zA-Z
现在对比encodeURI和encodeURIComponent,从名称上可看出encodeURI是针对整个URI进行编码,我们以特殊的URI--URL来说明下。
对于URL为http://www.baidu.com而言,如果用encodeURI编码,返回的仍是“http://www.baidu.com”;如果用encodeURIComponent
编码,返回的为"http%3A%2F%2Fwww.baidu.com"。
encodeURI所针对的是整个URI,并不会对分隔符如/,?,=符号进行编码,否则破坏了URI的原有含义,而encodeURIComponent则是针对URI的
某一部分进行编码,如查询字符串部分的&会被转义。
编码解码