今天在看《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
对应的解码方法是decodeURIComponent()。
三、总结对比
对这个两个方法我总结了下面这个表,可以更加直观简便的看出区别。
encodeURI() | encodeURIComponent() | |
---|---|---|
编码对象 | 整个URI | URI中的某一段 |
编码规则 | 对空格等特殊字符编码 | 对发现的任何非标准字符进行编码 |
解码方法 | decodeURI() | decodeURIComponent() |
另外,以前使用的编码方法escape()和unescape()以及被ECMA-262第三版废弃了~~