一、前言
統(tǒng)一資源標(biāo)識(shí)符,或叫做 URI,是用來(lái)標(biāo)識(shí)互聯(lián)網(wǎng)上的資源(例如,網(wǎng)頁(yè)或文件)和怎樣訪問(wèn)這些資源的傳輸協(xié)議(例如,HTTP 或 FTP)的字符串。除了encodeURI、encodeURIComponent、decodeURI、decodeURIComponent四個(gè)用來(lái)編碼和解碼 URI 的函數(shù)之外 ECMAScript 語(yǔ)言自身不提供任何使用 URL 的支持。
二、URI組成形式
一個(gè) URI 是由組件分隔符分割的組件序列組成。其一般形式是:
Scheme : First / Second ; Third ? Fourth
其中斜體的名字代表組件;“:”, “/”, “;”,“?”是當(dāng)作分隔符的保留字符
三、區(qū)別
encodeURI 和decodeURI 函數(shù)操作的是完整的 URI;這倆函數(shù)假定 URI 中的任何保留字符都有特殊意義,所有不會(huì)編碼它們。
encodeURIComponent和encodeURIComponent函數(shù)操作的是組成 URI 的個(gè)別組件;這倆函數(shù)假定任何保留字符都代表普通文本,所以必須編碼它們,所以它們(保留字符)出現(xiàn)在一個(gè)完整 URI 的組件里面時(shí)不會(huì)被解釋成保留字符了。
var uri = "http://xx/#/y?a=1%&b=我";
var string1 = encodeURI(uri);
var string2 = encodeURIComponent(uri);
console.log(string1);//http://xx/#/y?a=1%25&b=%E6%88%91
console.log(string2);//http%3A%2F%2Fxx%2F%23%2Fy%3Fa%3D1%25%26b%3D%E6%88%91
這也正是可以對(duì)整個(gè)URI使用encodeURI(),而只能對(duì)附加在現(xiàn)有URI后面的字符串使用encodeURIComponent()的原因所在。一般來(lái)說(shuō),我們使用encodeURIComponent()方法的時(shí)候要比使用encodeURI()更多,因?yàn)樵趯?shí)踐中更常見(jiàn)的是對(duì)查詢字符串參數(shù)而不是對(duì)基礎(chǔ)URL進(jìn)行編碼.