URL 传参中需要处理的特殊字符

Posted ryanzheng

tags:

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

例如实际请求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

服务器返回结果:

"服务器异常:
net.sf.json.JSONException: Found starting ‘[‘ but missing ‘]‘ at the end. at character 0 of null

 

这个异常很明显是由于URL的data参数中的name属性内容包含一个特殊字符”=”,导致data解析JSON异常,这个时候比较简单的方法就是把特殊字符替换掉,接下来看看URL中都有哪些特殊字符。

 

特殊字符

  • 1.+ URL 中+号表示空格 %2B

  • 2.空格 URL中的空格可以用+号或者编码 %20

  • 3./ 分隔目录和子目录 %2F

  • 4.? 分隔实际的 URL 和参数 %3F

  • 5.% 指定特殊字符 %25

  • 6.# 表示书签 %23

  • 7.& URL 中指定的参数间的分隔符 %26

  • 8.= URL 中指定参数的值 %3D

如果传递参数中包含上述特殊字符,比较标准的做法是先对参数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;
    }

 

以上是关于URL 传参中需要处理的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

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

在传参时,url参数中包含+空格=%&#等特殊符号的处理

如何正确处理Shell 函数传人参数中包含的特殊字符

传参的时候遇到特殊符号的处理

url路径中 符号是特殊字符吗

请求传参 有特殊符号