ajax传参里含有特殊字符的坑

Posted 夜空中最亮的星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax传参里含有特殊字符的坑相关的知识,希望对你有一定的参考价值。

问题场景:今天在测试自己手上的页面功能时,发现一个小bug,在用ajax向后台发数据时,只要参数中出现一些特殊字符,控制台会报错http 400的问题,其实就是特殊字符服务器不能解析。好了,问题是找到了,但是改如何解决勒!

首先想到的就是把特殊字符进行编码在传递,但是自己写检测特殊字符函数代码时发现,这要检测的特殊字符数不胜数,完全正则不过来。
上网搜了一下,发现有一个现成的方法:encodeURIComponent();放在代码上跑一下,任务解决了!哈哈。问题解决了,但是还是要看看其中的更深的原理!

特殊符号由前台传入时如果没有进行转码处理的,是这样:my param is 7% and 6%7,异常显示是[my para is 7is%207%%20and%206%7],所以就出错了,

下面是一些常见字符列表

url特殊符号 在url中实际含义 转码后的十六进制表示

符号 含义 编码
+ +号表示空格 %2B
空格 用+号或者编码 %20
/ 分隔目录和子目录 %2F
? 分隔实际的 URL 和参数 %3F
% 指定特殊字符 %25
# 表示书签 %23
& 参数间的分隔符 %26
= URL 中指定参数的值 %3D

 

 

 

 

 

 

 


解决方案其实都是类似的,这个看自己的习惯。

方案一:var str= para.replace(/%/g,"%25");//g代表全局匹配替换
方案二:encodeURIComponent(str); //使用改方法自动转码。

存疑问方案:网上有说用json格式的参数就能解决,但是自己本身就是用的json格式的,但是出现这类问题!所以存疑问!

转自:http://www.cnblogs.com/smalldark/p/6496675.html

以上是关于ajax传参里含有特殊字符的坑的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序页面跳转url传参,对象、数据过长、特殊字符问题

vuerouter.query如何获取含有特殊字符的参数

Ajax 提交 数据含特殊字符 出现500错误

Vue中js获取url参数,特殊字符的转译、逆转译

URL传参中不能带特殊的字符以及处理方案

接口传参特殊字符处理方法