Ajax传递特殊字符问题

winterSky 2020-04-22 AM 893℃ 0条

注:当你用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.何时用何种方法

  • 如果只是编码字符串,不和URL有半毛钱关系,那么用escape。
  • 如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI。
  • 当你需要编码URL中的参数的时候,那么encodeURIComponent是最好方法。

转自https://www.cnblogs.com/yxkNotes/p/11736606.html

标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~