版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/duola8789/article/details/84139763
统一资源标识符,或叫做URI,是用来标识互联网上的资源(例如,网页或文件)和怎样访问这些资源的传输协议(例如,HTTP 或 FTP)的字符串
encodeURI()
和encodeURIComponent()
方法可以对URI进行编码,编码为UTF-8编码,前者不会对属于URI的特殊字符进行编码,比如冒号、正斜杠等,而后者会对所有发现的特殊字符进行编码
encodeUR
会替换所有的字符,但不包括以下字符,即使它们具有适当的UTF-8转义序列:
类型 | 包含 |
---|---|
保留字符 | / ? : @ & = + $ |
非转义的字符 | 字母 数字 - _ . ! ~ * ' ( ) |
数字符号 | # |
let str = 'http://www.baidu.com/我'
encodeURI(str)
// "http://www.baidu.com/%E6%88%91"
encodeURIComponent(str)
// "http%3A%2F%2Fwww.baidu.com%2F%E6%88%91"
请注意,encodeURI
自身无法产生能适用于HTTP协议中GET或POST请求的URI,例如对于XMLHTTPRequests, 因为&
,+
, 和=
不会被编码,然而在GET和POST请求中它们是特殊字符。然而encodeURIComponent
这个方法会对这些字符编码。
所以一般来说,使用encodeURIComponent()
的场景是对URI中某一段(一般是查询参数)进行处理,使用相对更加频繁
var test = 'http://www.baidu.com/?type=a&name=zhou';
console.log(encodeURI(test), 'encodeURI');
// http://www.baidu.com/?type=a&name=zhou
console.log(encodeURIComponent(test), 'encodeURIComponent');
// http%3A%2F%2Fwww.baidu.com%2F%3Ftype%3Da%26name%3Dzhou
decodeURI
、decodeURIComponent
用来解码,用法类似。
参考
- MDN - encodeURI()
- JavaScript高级程序设计(第3版)