例如实际请求 URL 如下:
http://www.douwansha.com/mdeditor?data=[{"address":null,"name":"公司名称 = 阿里巴巴集团","id":"12345","priority":null,"tel":null,"urllink":"1","keytype":null,"errortype":"测试项目","errordesc":"过年咯","submit_user":"loongshawn"}]&dize=1&user=loongshawn
服务器返回结果:
"服务器异常:\r\nnet.sf.json.JSONException: Found starting'['but missing']' at the end. at character 0 of null
这个异常很明显是由于 URL 的 data 参数中的 name 属性内容包含一个特殊字符 "=", 导致 data 解析 JSON 异常, 这个时候比较简单的方法就是把特殊字符替换掉, 接下来看看 URL 中都有哪些特殊字符.
特殊字符
1.+ URL 中 + 号表示空格 +
2. 空格 URL 中的空格可以用 + 号或者编码
3./ 分隔目录和子目录 /
4.? 分隔实际的 URL 和参数 ?
5.% 指定特殊字符 %
6.# 表示书签 #
7.& URL 中指定的参数间的分隔符 &
8.= URL 中指定参数的值 =
如果传递参数中包含上述特殊字符, 比较标准的做法是先对参数 value 进行 URLEncoder 编码, 然后解析是再利用 URLDecoder 解码.
java 中 URL 的编码和解码函数:
编码: java.net.URLEncoder.encode(String s);
解码: java.net.URLDecoder.decode(String s);
可能有时候编程方式并不一定遵循标准的做法 (依据实际业务而定), 比如并没有利用 URL 编码解码规范, 直接是明文传输, 这个时候可以仅仅针对参数值中的参数进行过滤处理, 比如将特殊字符替换掉等.
如下方法, 过滤掉特殊字符, 但前提是不影响信息的理解.
- public static String getUrlReplacedValue(String value){
- String str = value.replace("&", "-")
- .replace("=", "-")
- .replace("#", "-")
- .replace("%", "-")
- .replace("/", "-")
- .replace("?", "-");
- return str;
- }
来源: http://www.bubuko.com/infodetail-2766652.html