escape() , encodeURI() , encodeURIComponent()区别
javascript对字符串进行编码涉及3个函数:escape() , encodeURI() , encodeURIComponent(),对应的3个解码函数是unescape() , decodeURI(),decodeURIComponent().
下面来分别阐述这三个方法的区别:
1. escape 方法:
escape 方法返回一个包含参数内容的UNICODE格式的字符串值。所有的“空格”、“标点”、“重音字符”以及任何非ASCII字符都会被替换为带着%xx 编码,这里的xx是一个表示原来字符的16进制数字。例如一个空格会被替换为%20 。
escape 和 unescape 方法让你可以对字符串编码和解码。 escape 调用方法将返回对ISO拉丁字符参数的16进制编码,而 unescape 方法会为指定的16进制编码返回ASCII 字符。
例如:
1 escape('~!@#$%^&*(){}[]=:/,;?+\'"\\')
2 //%7E%21@%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%2C%3B%3F+%27%22%5C
注:escape 不会编码的字符:@ * / +,由于+字符在服务器端会被解释成空格,并且它不能很好的正确处理非ASCII字符,因此应该尽量避免使用escape,而最好使用encodeURIComponent().
2. encodeURI 方法:
encodeURI 方法返回一个编码的 URI, encodeURI 不对以下字符编码: ":", "/", ";", and "?" 而可以用encodeURIComponent对这些字符编码,通过替换每一个字符实例成一个或是两三个编码过的UTF-8字符,来对URI编码。
例如:
1 encodeURI('~!@#$%^&*(){}[]=:/,;?+\'"\\')
2 //~!@#$%25%5E&*()%7B%7D%5B%5D=:/,;?+'%22%5C
3. encodeURIComponent 方法:
encodeURIComponent会对更多的字符进行编码,包括表示路径的"/",所以当使用时,这个解释和encodeURI一样,实际上encodeURI 和 encodeURIComponent 差别就是一个是对更多的字符编码,而一个只是对URI部分编码。
同样字符串的例子:
1 escape('~!@#$%^&*(){}[]=:/,;?+\'"\\') 2 //%7E%21@%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%2C%3B%3F+%27%22%5C 3 encodeURI('~!@#$%^&*(){}[]=:/,;?+\'"\\'); 4 //~!@#$%25%5E&*()%7B%7D%5B%5D=:/,;?+'%22%5C 5 encodeURIComponent('~!@#$%^&*(){}[]=:/,;?+\'"\\'); 6 //~!%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%2C%3B%3F%2B'%22%5C

浙公网安备 33010602011771号