Ajax傳遞特殊字符問題


注:當你用ajax傳遞值到服務器端,如果值中包含特殊字符串如+,&等,在服務器端獲取的結果可能就會出現差異,因為這些字符有其它用途,如“+”表示連接符,在轉義后你獲取到的就是空格。

解決方法:

  • 如果變量中確實需要包含這些特殊字符,請用encodeURIComponent()函數過濾,它會對這些字符編碼,服務器端是會被自動解碼的,不需要處理。
  • 盡量提交json格式數據 如 {a:"aaa", b:"bbb"}  而非 "a=aaa&b=bbb"

1.encodeURL()

  1. encodeURI(URIstring)函數可把字符串作為 URI 進行編碼。
  2. 該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ’ ( ) 。
  3. 該方法的目的是對 URI 進行完整的編碼,因此對以下在 URI 中具有特殊含義的 ASCII 標點符號,encodeURI() 函數是不會進行轉義的:;/?: @&=+$,#
  4. 如果 URI 組件中含有分隔符,比如 ? 和 #,則應當使用 encodeURIComponent() 方法分別對各組件進行編碼。

2.encodeURIComponent()

  1. encodeURIComponent(URIstring)函數可把字符串作為 URI 組件進行編碼。
  2. 該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ’ ( ) 。
  3. 其他字符(比如 :;/?: @&=+$,# 這些用於分隔 URI 組件的標點符號),都是由一個或多個十六進制的轉義序列替換的。

3.二者區別

  1. encodeURI: 不編碼的符號是: A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( )
  2. encodeURIComponent: 不編碼的符號是:A-Z a-z 0-9 - _ . ! ~ * ' ( )

4.escape()方法和以上兩者不是同一類

  1. escape是對字符串(string)進行編碼(而另外兩種是對URL),作用是讓它們在所有電腦上可讀。
  2. 編碼之后的效果是%XX或者%uXXXX這種形式。
  3. 其中 ASCII字母、數字、@*/+ ,這幾個字符不會被編碼,其余的都會。
  4. 最關鍵的是,當你需要對URL編碼時,忘記這個方法,這個方法是針對字符串的,不適用URL。

 5.何時用何種方法

  • 1、如果只是編碼字符串,不和URL有半毛錢關系,那么用escape。

 

  • 2、如果你需要編碼整個URL,然后需要使用這個URL,那么用encodeURI。
  • 3、當你需要編碼URL中的參數的時候,那么encodeURIComponent是最好方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM