一燕耿、前言
統(tǒng)一資源標(biāo)識(shí)符,或叫做 URI姜胖,是用來標(biāo)識(shí)互聯(lián)網(wǎng)上的資源(例如誉帅,網(wǎng)頁或文件)和怎樣訪問這些資源的傳輸協(xié)議(例如,HTTP 或 FTP)的字符串右莱。除了encodeURI蚜锨、encodeURIComponent、decodeURI隧出、decodeURIComponent四個(gè)用來編碼和解碼 URI 的函數(shù)之外 ECMAScript 語言自身不提供任何使用 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()的原因所在。
一般來說,我們使用encodeURIComponent()方法的時(shí)候要比使用encodeURI()更多,因?yàn)樵趯?shí)踐中更常見的是對(duì)查詢字符串參數(shù)而不是對(duì)基礎(chǔ)URL進(jìn)行編碼.