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=测试"