Android URL中+转义之后导致服务器请求无法获得正确的参数值
请求中有筛选条件里面含有+的,在拼接到URL中之后就会变成空格,+转义之后是%2B,最简单的就是我们可以将最终的URL进行+的替换处理。
将url参数中的+,&,=,/等转义编码
把这些字符转化成服务器可以识别的字符就可以了,对应关系表如下:
符号 | URL中转义结果 | 转义码 |
---|---|---|
+ | URL中+号表示空格 | %2B |
空格 | URL中的空格可以用+号或者编码 | %20 |
/ | 分隔目录和子目录 | %2F |
? | 分隔实际的URL和参数 | %3F |
% | 指定特殊字符 | %25 |
# | 表示书签 | %23 |
& | URL中指定的参数间的分隔符 | %26 |
# | URL中指定参数的值 | %26 |
= | URL中指定参数的值 | %3D |
1.解决:
①避免在url使用+号
②如果类似加密,可能产生加号以及各种特殊符号,建议接口使用post
③直接将URL中的+给替换处理成%2B
/**
* 转义URL中的+
* @param url
* @return
*/
public static String escapePlusSign(String url){
// 解析时,会把 + 号转换为 空格,导致参数不能正常的传输,这里需要进行处理一下
if(!TextUtils.isEmpty(url)){
if(url.contains("+")){
return url.replace("+", "%2B");
}
}
return url;
}
url = Util.escapePlusSign(url);