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

服务器返回结果:

"服务器异常:\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 中+号表示空格 %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;
    }

原文地址:https://www.cnblogs.com/ryanzheng/p/9642129.html

时间: 2024-10-11 10:31:05

URL 传参中需要处理的特殊字符的相关文章

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

有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值.例如 空格的编码值是"%20". 如果不使用转义字符,这些编码就会当URL中定义的特殊字符处理. 下表中列出了一些URL特殊符号及编码 十六进制值 1.+ URL 中+号表示空格 %2B 2.空格 URL中的空格可以用+号或者编码 %20 3./ 分隔目录和子目录 %2F 4.? 分隔实际的 U

配置Tomcat解决URL传参引出的中文乱码问题

今天在写一个JSP页面时候,发现下面报错: <span style="font-size:18px;"> <a href="request.jsp?username=小七七">测试URL传参</a></span> 通常情况下,通过使用contentType和下面的就可以解决传参过程中的中文乱码问题,但是貌似URL传参还要设备别的东西. <% request.setCharacterEncoding("u

对于url传参的心得。在java中获取数据。。

由于项目抓的紧,发现一个url传参的问题,忙里偷闲整理了一下. 首先得说明,我是要用过另一个项目的url获取json串解析出来给自己的接口使用,这是在java中完成.一般的情况是这样的: 1 public static void main(String args[]){ 2 String url="http://123.56.6.112:2080/ec_app_api/article/getfirst?params={v:1}"; //通过?在后面传参 3 StringBuilder

如何解决url传参导致错误问题

如何解决url传参导致错误问题:如果使用url传并且参数中含有特殊字符的话,那么就会导致一些错误,下面就来介绍一下如何解决此问题.方法很简单,只要使用encodeURI ()函数进行编码即可.如果得到原来的字符串,使用decodeURI()函数即可,这里就不多介绍了.更多相关内容可以参阅js的escape.encodeURI和encodeURIComponent的区别一章节. 原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=97

javascript Url 传参的坑,base64参数和url参数之间的转移

在url传参时会对特殊字符进行转义,所以通过base64传参是需要进行处理 简单说下base64的使用 1,在项目根目录下安装 npm install --save js-base642,在项目文件中引入 let Base64 = require('js-base64').Base64 import { Base64 } from "js-base64"; 3,在项目文件中使用 Base64.encode('大元') // fdsfds5f34Base64.decode('fdsfds

关于url传参中文乱码问题

之前都一直很不了解中文编码得问题,之前在做项目中没碰到那么头痛的问题.所以一直没有了解中文乱码的问题. 问题描述: 地址: http://localhost:8080/sun-government/contest/get_teams_by_type_with_page?typeName=新材料 当在windows 跑 myeclipse的命令台  能正确打印出typeName的参数,而且持久层并没有问题. 当在 linux 跑catalina模式  打印出乱码,持久层也是乱码. 百度了好几个好几

Java URL传参中文乱码问题

我们经常会遇到这样的场景:在URL中传递参数,如果该参数为中文,如果设置不当,会出现乱码问题. URL传参所使用的编码为服务器中设置的编码,而ajax请求的编码为页面编码. 如果不设置tomcat的默认编码为ISO-8859-1,而如果在设置中加入 useBodyEncodingForURI="true" <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="

url 传参

php 支持 url 传参的形式 调用后台php文件,如: 1 <a href='process.php?action=download&id=$id'>下载</a> 在后台process.php文件中,可通过$_GET[]方式获取参数: 1 <?php 2 if(@$_GET["action"] == "download"){ //检测此action 3 ... 4 } 5 ?> 值得注意的是: 要小心参数可能包含' '

浏览器URL传参最大长度问题

这几天为解决一个BUG头疼了一段时间,BUG现象如下: 一个选择人员的选择控件,当选择多个人时(50多个的时候),返回没有错误现象,而再一次打开的时候就报404错误.看到这个错误非常纳闷,无法下手,只能再一次看控件的代码,在详细看代码时,发现所有的参数都是经过URL传参的,赶紧百度一下URL参数的大小限制(从这个百度开始,我就进入一个误区:参数大小的限制).结果发现网上都说URL参数的大小为256字节,再一看自己的数据,的确超过了这么多,既然找到原因就修改,把参数传递方法修改为不通过URL传参.