encodeURI() 和 encodeURIComponent()

857 阅读2分钟

今天在看《JavaScript高级程序设计》这本书的时候,刚好看到关于URI编码方法,联想起之前所看的http的知识,于是对比一下encodeURI和encodeURIComponent这两个方法。

首先这两个方法都是用于URI的编码,知其然知其所以然,为什么需要用到URI的编码呢?

简单的说就是URI编码后方便浏览器识别,有效的URI中不能包含某些字符,例如空格。用特殊的UTF-8编码替换所有无效的字符,从而让浏览器能够接受和理解。

一、encodeURI()

encodeURI()主要是用于整个URI进行编码,它会将URI中的空格替换成%20,其他字符都原封不动。

var uri = "https://mp.csdn.net/console/home #start"
console.log(encodeURI(uri))

比如执行这段代码,可以看到,控制台打印出的URI只有空格被替换了,其他都是原封不动的。

https://mp.csdn.net/console/home%20#start

既然有编码方法,自然也有解码方法,encodeURI()对应的解码方法就是decodeURI()。 使用decodeURI()便可以将上面这个编码后的URI解码成原来的URI了。

二、encodeURIComponent()

encodeURIComponent()是用于对URI中的某一段进行编码,它会将它发现的任何非标准字符都进行编码。

var uri = "https://mp.csdn.net/console/home #start"
console.log(encodeURIComponent(uri))

同样是刚刚这个URI,使用这个方法打印出来的,便是下面这样:

https%3A%2F%2Fmp.csdn.net%2Fconsole%2Fhome%20%23start

三、总结对比

对这个两个方法我总结了下面这个表,可以更加直观简便的看出区别。

encodeURI()
编码对象整个URI
编码规则对空格等特殊字符编码
解码方法decodeURI()
encodeURIComponent()
URI中的某一段
对发现的任何非标准字符进行编码
decodeURIComponent()

另外,以前使用的编码方法escape()和unescape()以及被ECMA-262第三版废弃了~~