1. escape() escape() 函數可對字串進行編碼,這樣就可以在所有的電腦上讀取該字串。該方法不會對 ASCII 字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼+/-*_.@。其他所有的字元都會被逸出序列替換。所有的空格符、標點符號、特殊字元以及其他非ASCII字元都將被轉化成%xx格式的字元編碼(xx等於該字元在字元集表裡面的編碼的16進位數字)。比如,空格符對應的編碼是%20。而對於0-255以外的unicode值進行編碼時輸出%u****格式,例如”我”編碼後的值為%u6211。 2. encodeURI() encodeURI() 函數可把字串作為 URI 進行編碼,其中的某些字元將被十六進位的逸出序列進行替換。該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼+/-*_.!~@’();/?:&=$,#。該方法的目的是對 URI 進行完整的編碼,因此對以下在 URI 中具有特殊含義的 ASCII 標點符號,encodeURI() 函數是不會進行轉義的:;/?:@&=+$,# 3. encodeURIComponent() encodeURIComponent() 方法:把URI字串採用UTF-8編碼格式轉化成escape格式的字串。與encodeURI()相比,這個方法將對更多的字元進行編碼,比如 / 等字元。所以如果字串裡麵包含了URI的幾個部分的話,不能用這個方法來進行編碼,否則 / 字元被編碼之後URL將顯示錯誤。該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼-*_.!~’()。 總結:1. escape()對0-255以外的unicode值進行編碼時輸出%u****格式,其它情況下escape,encodeURI,encodeURIComponent如果對特殊字元編碼則結果相同,結果相同是指字元同時在這三個函數的編碼範圍內時,比如空格,對於/等不是三個函數同時處理則沒有比較意義。 2. escape()是一個古老的函數,所以盡量不要使用。當對URI進行編碼時,因為escape會對URI中常見字元進行編碼,比如/?等,所以對URI進行編碼時應該選擇encodeURI(),而當對使用者提交的表單欄位進行編碼時,我們知道,在使用者提交的表單欄位中,如果有空格,則會被轉化為+字元,而伺服器解析的時候則會認為+號代表空格。但escape()不會對’+'進行編碼,所以這時應該選擇encodeURIComponent()。 3. 因為encodeURI()不對URL中常見的字元進行編碼:;/?:@&=+$,#,而escape()和encodeURIComponent()會對這些特殊字元編碼,所以當對URI進行編碼時應該選擇encodeURI()。 4. encodeURIComponent方法在編碼單個URIComponent(指請求參數)應當是最常用的。因為如果參數中包含了?&等特殊字元的話,encodeURI是不會對它們進行編碼的,這樣可能就造成解析請求參數的錯誤,不用escape()的原因見總結的第一條。 5. 三個函數對應的解碼函數分別是unescape(), decodeURI(), decodeURIComponent()。 6. 很多時候瀏覽器會自動對資料進行編碼,比如URL,因此在傳輸資料前最好先進行編碼,接收後再用對應的解碼函數進行解碼,這樣可以有效保證資料的一致性。