對于 URL 來說,之所以要進行編碼前计,是因為 URL 中有些字符會引起歧義。
不同的操作系統(tǒng)垃杖、不同的瀏覽器男杈、不同的網(wǎng)頁字符集都會對 URL 的編碼有影響,造成了 URL 編碼相當混亂的局面调俘,具體對 URL 編碼是怎樣影響的伶棒,請參考阮一峰-關(guān)于 URL 編碼,為了保證客戶端只用一種編碼方法向服務(wù)器發(fā)出請求彩库,讓服務(wù)器得到的數(shù)據(jù)是格式一致的肤无,所以我們采用 JavaScript 先對 URL 進行編碼,再向服務(wù)器提交骇钦。
JavaScript 有三個對 URL 進行編碼的函數(shù):
escape()
這是最古老的一個編碼函數(shù)宛渐,目前已經(jīng)不再提倡使用了,實際上,escape() 不能直接用于 URL 編碼窥翩,它的真正作用是返回一個字符的 Unicode 編碼值业岁,由于已經(jīng)不再提倡使用了,就不再多說了寇蚊。
encodeURL() 和 decodeURL()
encodeURL() 會對整個 URL 進行編碼笔时,編碼后,它輸出符號的 utf-8 形式幔荒,并且在每個字節(jié)前加上 % 糊闽;對應(yīng)的解碼函數(shù)式 decodeURL()梳玫;需要注意的是爹梁,它不對單引號 ' 編碼。
encodeURLComponent() 和 decodeURIComponent()
encodeURLComponent() 用于對 URL 的組成部分進行個別編碼提澎,而不用于對整個 URL 進行編碼姚垃;如 "; / ? : @ & = + $ , #" ,這些在 encodeURI() 中不被編碼的符號盼忌,在encodeURIComponent() 中統(tǒng)統(tǒng)會被編碼积糯;它對應(yīng)的解碼函數(shù)是decodeURIComponent()。