注:当你用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是最好方法。