在get请求参数中如果包含&符号,在发送请求时就会被当作参数的分割符处理
比如请求参数:var url= "xxxx?name=" + "aaa&bbb"
期望的请求参数应该是name = aaa&bbb
实际的请求参数会变成 name = aaa 和 bbb=
处理方法
在拼接参数的时候,使用 encodeURIComponent() 进行手动转义。var url= "xxxx?name=" + encodeURIComponent("aaa&bbb")
特殊特殊字符的含义
| 字符 | 特殊字符的含义 | URL编码 |
|---|---|---|
| + | URL 中+号表示空格 | %2B |
| 空格 | URL中的空格可以用+号或者编码 | %20 |
| / | 分隔目录和子目录 | %2F |
| ? | 分隔实际的 URL 和参数 | %3F |
| % | 指定特殊字符 | %25 |
| # | 表示书签 | %23 |
| & | URL 中指定的参数间的分隔符 | %26 |
| = | URL 中指定参数的值 | %3D |
示例代码:
//处理特殊字符get请求识别错误的情况
//filename为带有特殊字符的url字符串
var curFilename = null;
//含有特殊字符的话,处理完再赋值(没有处理空字符串)
if(filename.indexOf('#') != -1 || filename.indexOf('+') != -1 || filename.indexOf('/') != -1 || filename.indexOf('?') != -1 || filename.indexOf('%') != -1 || filename.indexOf('&') != -1 || filename.indexOf('=') != -1){
curFilename = filename.replace(/([\#|\+|\/|\?|\%|\#|\&|\=])/g, function ($1) {
return encodeURIComponent($1)
})
}else{
//如果不含有特殊字符直接赋值
curFilename = filename;
}
//发送请求(我这里是我项目中封装的,大家正常发送请求就可以)
Cm.get(Cm.webroot + curFilename, function (msg) {
},function (msg) {
})
本文详细解释了在GET请求中如何正确处理包含特殊字符的参数,如&、+、/、?、%、#、&和=,并提供了使用encodeURIComponent()函数进行手动转义的具体方法。
1571

被折叠的 条评论
为什么被折叠?



