escape()、encodeURI()、encodeURIComponent()区别详解

前言

JavaScript中有三个可以对字符串编码的函数,分别是:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 。


 

escape()和它们不是同一类

简单来说,escape()是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读。 
编码之后的效果是%XX或者%uXXXX这种形式。 其中 ASCII字母、数字、@*/+ ,这几个字符不会被编码,其余的都会。 
最关键的是,当你需要对URL编码时,请忘记这个方法,这个方法是针对字符串使用的,不适用于URL。

escape('编码')  //"%u7F16%u7801"
unescape('%u7F16%u7801')  //"编码"

 

 


 

最常用的encodeURI()和encodeURIComponent()

对URL编码是常见的事,所以这两个方法应该是实际中要特别注意的。 
它们都是编码URL,唯一区别就是编码的字符范围,其中: 
encodeURI方法不会对下列字符编码 ASCII字母、数字、~!@#$&*()=:/,;?+’ 
encodeURIComponent方法不会对下列字符编码 ASCII字母、数字、~!*()’ 
所以encodeURIComponent比encodeURI编码的范围更大。

 

实际例子来说,encodeURIComponent会把http://  编码成  http%3A%2F%2F 而encodeURI却不会。

encodeURI('https://www.baidu.com/')           //"https://www.baidu.com/"

encodeURIComponent('https://www.baidu.com/')  //"https%3A%2F%2Fwww.baidu.com%2F"

 


最重要的,我该什么场合用什么方法

区别上面说的很清楚了,接下来从实际例子来说说把。 
1、如果只是编码字符串,不和URL有半毛钱关系,那么用escape。 
2、如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI。 
3、当你需要编码URL中的参数的时候,那么encodeURIComponent是最好方法。

var a = "http://blog.csdn.net/?ref=toolbar_logo&test=测试"

escape(a)  
//"http%3A//blog.csdn.net/%3Fref%3Dtoolbar_logo%26test%3D%u6D4B%u8BD5"
unescape("http%3A//blog.csdn.net/%3Fref%3Dtoolbar_logo%26test%3D%u6D4B%u8BD5")
//"http://blog.csdn.net/?ref=toolbar_logo&test=测试"

encodeURI(a)  
//"http://blog.csdn.net/?ref=toolbar_logo&test=%E6%B5%8B%E8%AF%95"
decodeURI("http://blog.csdn.net/?ref=toolbar_logo&test=%E6%B5%8B%E8%AF%95")
//"http://blog.csdn.net/?ref=toolbar_logo&test=测试"


encodeURIComponent(a)
//"http%3A%2F%2Fblog.csdn.net%2F%3Fref%3Dtoolbar_logo%26test%3D%E6%B5%8B%E8%AF%95"
decodeURIComponent("http%3A%2F%2Fblog.csdn.net%2F%3Fref%3Dtoolbar_logo%26test%3D%E6%B5%8B%E8%AF%95")
//"http://blog.csdn.net/?ref=toolbar_logo&test=测试"

 

posted @ 2017-08-29 11:48  猫老板的豆  阅读(280)  评论(0编辑  收藏  举报