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)義序列替換的。
總的來說,三者的區(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ù)編碼。