編碼有三種
1、escape(對應解碼unescape)
定義:escape() 對字符串進行編碼。
注意:
該方法不會對 ASCII 字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: * @ - _ + . / 。其他所有的字符都會被轉義序列替換。
2、encodeURI(對應解碼decodeURI)
定義:encodeURI() 函數可把字符串作爲 URI 進行編碼。
注意:
該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。
該方法的目的是對 URI 進行完整的編碼,因此對以下在 URI 中具有特殊含義的 ASCII 標點符號,encodeURI() 函數是不會進行轉義的:;/?:@&=+$,#
3、encodeURIComponent(對應解碼decodeURIComponent)
定義:encodeURIComponent() 函數可把字符串作爲 URI 組件進行編碼
注意:
該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。
其他字符(比如 :;/?:@&=+$,# 這些用於分隔 URI 組件的標點符號),都是由一個或多個十六進制的轉義序列替換的。
綜上
三者共同點:
不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。
不同:
unescape :除上述其他全部編碼(現在貌似不提倡使用,最早的,而且不是直接對url轉碼)
encodeURI:URL中(用於分隔組件的)的某些特殊字符不會編碼,其他編碼
encodeURIComponent:URL中(用於分隔組件的)的某些特殊字符編碼,其他也編碼
所以瀏覽器url對地址中的特殊符號是如何處理的,讓我有些費解,因爲分隔組件的特殊字符沒有編碼,但裏面一部分參數中含有的特殊字符卻轉義了(那我拿到url應該以何種方式解碼),求解。