zoukankan      html  css  js  c++  java
  • 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解码。

     PHP 中 URL 的编码和解码函数如下:

    • 编码 URL 字符串 :string urlencode( string $str )   

    • 此函数可以将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。
      返回值中除了-_. 之外的所有非字母数字字符都将被替换成百分号 (%) 后跟两位十六进制数,空格则编码为加号 (+)。
      此编码与 WWW 表单 POST 数据的编码方式是一样的。但是由于历史原因,此编码在将空格编码为加号 (+) 方面与  RFC3896 编码
    • 解码已编码的 URL 字符串 :string urldecode( string $str )

       解码给出的已编码字符串中的任何 %##。加号 ('+') 被解码成一个空格字符。

    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;
        }
  • 相关阅读:
    make[1]: *** [/workopenwrt/trunk/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/stamp/.tools_install_nnnnn] Error 2 make[1]: Leaving directory `/work/openwrt/trunk' make: *** [world]
    安卓端与开发板通信
    openwrt串口的使用
    .OpenWrt驱动程序Makefile的分析概述 、驱动程序代码参考、以及测试程序代码参考
    openwrt系统之字符设备驱动软件包加载、测试程序加载
    cc2530串口通信流程
    cc2530操作任务系统初始化分析
    总结OpenWrt系统基本操作方法
    Zigbee协议栈OSAL层API函数【转载】
    cc2530启动流程---广播发送数据
  • 原文地址:https://www.cnblogs.com/ryanzheng/p/9642129.html
Copyright © 2011-2022 走看看