對于 URL 來說,之所以要進行編碼,是因為 URL 中有些字符會引起歧義。
不同的操作系統、不同的瀏覽器、不同的網頁字符集都會對 URL 的編碼有影響,造成了 URL 編碼相當混亂的局面,具體對 URL 編碼是怎樣影響的,請參考阮一峰-關于 URL 編碼,為了保證客戶端只用一種編碼方法向服務器發出請求,讓服務器得到的數據是格式一致的,所以我們采用 JavaScript 先對 URL 進行編碼,再向服務器提交。
JavaScript 有三個對 URL 進行編碼的函數:
escape()
這是最古老的一個編碼函數,目前已經不再提倡使用了,實際上,escape() 不能直接用于 URL 編碼,它的真正作用是返回一個字符的 Unicode 編碼值,由于已經不再提倡使用了,就不再多說了。
encodeURL() 和 decodeURL()
encodeURL() 會對整個 URL 進行編碼,編碼后,它輸出符號的 utf-8 形式,并且在每個字節前加上 % ;對應的解碼函數式 decodeURL();需要注意的是,它不對單引號 ' 編碼。
encodeURLComponent() 和 decodeURIComponent()
encodeURLComponent() 用于對 URL 的組成部分進行個別編碼,而不用于對整個 URL 進行編碼;如 "; / ? : @ & = + $ , #" ,這些在 encodeURI() 中不被編碼的符號,在encodeURIComponent() 中統統會被編碼;它對應的解碼函數是decodeURIComponent()。