背景:
今天在做一个任务时,用Jquery的Ajax传递一长串字符时,在后台的验证一直不成功,纠结时我了(那个字符串是随机生成的,特长)。查了一上午,原来是我生成的字符串中有+号,而在js传递的时候,会理解为是连接字符用的,到了后台就将+号自动变为空格了,所以后台的字符串和前台生成的已经不一样了。
原因:
js后自动解析特殊字符,如+号为连接符,解析为空格,&为变量连接符,服务器端接受数据时&以后的数据不显示等等。
解决办法:
1、将字符放到form中,然后用js提交form表单到服务器。
2、将字符中的特殊字符替换成十六进制的字符,一些特殊字符与十六进制的对应关系:
+ | 空格 | / | ? | % | & | = | # |
+ | / | ? | % | & | &3D | # |
str = str.replace(/ /g,"+"); 숫자를 16진수로 바꾸기
3. 가장 간단한 방법은 encodeURIComponent() 함수를 사용하는 것입니다.
이 방법은 ASCII 문자 및 숫자를 인코딩하지 않으며 다음 ASCII 구두점 문자도 인코딩하지 않습니다: - _ ~ * ' ( ) .
기타 문자(예: URI 구성 요소를 구분하는 데 사용되는 문장 부호인 ::/?:@&= $,#)는 하나 이상의 16진수 이스케이프 시퀀스로 대체됩니다.