注:當你用ajax傳遞值到服務器端,如果值中包含特殊字符串如+,&等,在服務器端獲取的結果可能就會出現差異,因為這些字符有其它用途,如“+”表示連接符,在轉義后你獲取到的就是空格。
解決方法:
- 如果變量中確實需要包含這些特殊字符,請用encodeURIComponent()函數過濾,它會對這些字符編碼,服務器端是會被自動解碼的,不需要處理。
- 盡量提交json格式數據 如 {a:"aaa", b:"bbb"} 而非 "a=aaa&b=bbb"
1.encodeURL()
- encodeURI(URIstring)函數可把字符串作為 URI 進行編碼。
- 該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ’ ( ) 。
- 該方法的目的是對 URI 進行完整的編碼,因此對以下在 URI 中具有特殊含義的 ASCII 標點符號,encodeURI() 函數是不會進行轉義的:;/?: @&=+$,#
- 如果 URI 組件中含有分隔符,比如 ? 和 #,則應當使用 encodeURIComponent() 方法分別對各組件進行編碼。
2.encodeURIComponent()
- encodeURIComponent(URIstring)函數可把字符串作為 URI 組件進行編碼。
- 該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ’ ( ) 。
- 其他字符(比如 :;/?: @&=+$,# 這些用於分隔 URI 組件的標點符號),都是由一個或多個十六進制的轉義序列替換的。
3.二者區別
- encodeURI: 不編碼的符號是: A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( )
- encodeURIComponent: 不編碼的符號是:A-Z a-z 0-9 - _ . ! ~ * ' ( )
4.escape()方法和以上兩者不是同一類
- escape是對字符串(string)進行編碼(而另外兩種是對URL),作用是讓它們在所有電腦上可讀。
- 編碼之后的效果是%XX或者%uXXXX這種形式。
- 其中 ASCII字母、數字、@*/+ ,這幾個字符不會被編碼,其余的都會。
- 最關鍵的是,當你需要對URL編碼時,忘記這個方法,這個方法是針對字符串的,不適用URL。
5.何時用何種方法
- 1、如果只是編碼字符串,不和URL有半毛錢關系,那么用escape。
- 2、如果你需要編碼整個URL,然后需要使用這個URL,那么用encodeURI。
- 3、當你需要編碼URL中的參數的時候,那么encodeURIComponent是最好方法。