JS19 encodeURI和encodeURIComponent

统一资源标识符,或叫做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

decodeURIdecodeURIComponent用来解码,用法类似。

参考

  • MDN - encodeURI()
  • JavaScript高级程序设计(第3版)

你可能感兴趣的:(JS19 encodeURI和encodeURIComponent)