JavaScript中escape,encodeURI, encodeURIComponent的區(qū)別

escape/unescape

escape() 函數(shù)可對字符串進行編碼,這樣就可以在所有的計算機上讀取該字符串。

該方法不會對 ASCII 字母和數(shù)字進行編碼,也不會對下面這些 ASCII 標(biāo)點符號進行編碼: * @ - _ + . / 。其他所有的字符都會被轉(zhuǎn)義序列替換。

unescape()解碼。

需要注意的是,ECMAScript v3 反對使用escape/unescape,應(yīng)用使用 encodeURI() 和 encodeURIComponent() 替代它。

encodeURI/decodeURI

encodeURI() 函數(shù)可把字符串作為 URI 進行編碼。

該方法不會對 ASCII 字母和數(shù)字進行編碼,也不會對這些 ASCII 標(biāo)點符號進行編碼: - _ . ! ~ * ' ( ) 。

該方法的目的是對 URI 進行完整的編碼,因此對以下在 URI 中具有特殊含義的 ASCII 標(biāo)點符號,encodeURI() 函數(shù)是不會進行轉(zhuǎn)義的:;/?:@&=+$,#

decodeURI()解碼。

encodeURIComponent/decodeURIComponent

encodeURIComponent() 函數(shù)可把字符串作為 URI 組件進行編碼。

該方法不會對 ASCII 字母和數(shù)字進行編碼,也不會對這些 ASCII 標(biāo)點符號進行編碼: - _ . ! ~ * ' ( ) 。

其他字符(比如 :;/?:@&=+$,# 這些用于分隔 URI 組件的標(biāo)點符號),都是由一個或多個十六進制的轉(zhuǎn)義序列替換的。

decodeURIComponent()解碼

總的來說,三者的區(qū)別在于:

1.escape/unescape用于對字符串進行解碼編碼(不推薦)。

2.encodeURI/decodeURI用于對 URI進行完整的編碼。

3.encodeURIComponent/decodeURIComponent用于對URI 組件進行編碼。也就是說常用來編碼URI參數(shù)。


例子:

1.URL中包含中文:www.你好.com

encodeURI('http://www.你好.com') 結(jié)果為"http://www.%E4%BD%A0%E5%A5%BD.com"

encodeURIComponent('http://www.你好.com')結(jié)果"http%3A%2F%2Fwww.%E4%BD%A0%E5%A5%BD.com"?

可見encodeURIComponent會編碼所有的URL保留字,所以不適合編碼URL

2.URL參數(shù)的值包含URL保留字:http://www.我.com?a=?,想把a=?傳給服務(wù)器

encodeURI('http://www.你好com?a=?')結(jié)果為"http://www.%E4%BD%A0%E5%A5%BDcom?a=?",這種情況服務(wù)器收到a的值為空,因為?是URL保留字。

encodeURI('http://www.你好.com') + '?a=' + encodeURIComponent('?')結(jié)果為"http://www.%E4%BD%A0%E5%A5%BD.com?a=%3F"這種情況服務(wù)器收到a的值為?。

再次說明,encodeURI/decodeURI用于對 URI進行編碼,encodeURIComponent適用于URI參數(shù)編碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容