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  

 

  

 

posted @ 2013-09-05 18:19  嘻哈披头士  阅读(165)  评论(0)    收藏  举报