統(tǒng)一資源標(biāo)識(shí)符拨与,或叫做URI,是用來標(biāo)識(shí)互聯(lián)網(wǎng)上的資源(例如,網(wǎng)頁或文件)和怎樣訪問這些資源的傳輸協(xié)議(例如蕾域,HTTP 或 FTP)的字符串
encodeURI()
和encodeURIComponent()
方法可以對URI進(jìn)行編碼,編碼為UTF-8編碼到旦,前者不會(huì)對屬于URI的特殊字符進(jìn)行編碼旨巷,比如冒號、正斜杠等添忘,而后者會(huì)對所有發(fā)現(xiàn)的特殊字符進(jìn)行編碼
encodeUR
會(huì)替換所有的字符采呐,但不包括以下字符,即使它們具有適當(dāng)?shù)腢TF-8轉(zhuǎn)義序列:
類型 | 包含 |
---|---|
保留字符 |
/ ? : @ & = + $
|
非轉(zhuǎn)義的字符 | 字母 數(shù)字 - _ . ! ~ * ' ( )
|
數(shù)字符號 | # |
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
自身無法產(chǎn)生能適用于HTTP協(xié)議中GET或POST請求的URI斧吐,例如對于XMLHTTPRequests, 因?yàn)?code>&,+
, 和=
不會(huì)被編碼,然而在GET和POST請求中它們是特殊字符仲器。然而encodeURIComponent
這個(gè)方法會(huì)對這些字符編碼煤率。
所以一般來說,使用encodeURIComponent()
的場景是對URI中某一段(一般是查詢參數(shù))進(jìn)行處理乏冀,使用相對更加頻繁
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高級程序設(shè)計(jì)(第3版)