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是最好方法。