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解码。
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;
}
URL 传参中需要处理的特殊字符的更多相关文章
- URL传参中不能带特殊的字符以及处理方案
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值.例如 ...
- 用URL传参带特殊字符,特殊字符丢失
文章:URL中编码URL特殊字符 文章:用URL传参带特殊字符,特殊字符丢失(encode) 如果url中有特殊字符,需要对url进行编码,否则特殊字符丢失,导致最终接收到的值不对.
- 关于微信浏览不能URL传参,URL中的问号被删除
关于微信浏览不能URL传参,URL中的问号被删除. 尼玛难道没有人遇到过这个问题?看了微信支付SDK3.0的代码,看到urlencode 看到了几次.实际上 在微信浏览器下 header('locat ...
- 将url传参的中文字符在页面中显示正常
//将url传参的中文字符在页面中显示正常var url=decodeURI(url);
- 关于url传参中文乱码问题
之前都一直很不了解中文编码得问题,之前在做项目中没碰到那么头痛的问题.所以一直没有了解中文乱码的问题. 问题描述: 地址: http://localhost:8080/sun-government/c ...
- 浏览器URL传参最大长度问题
这几天为解决一个BUG头疼了一段时间,BUG现象如下: 一个选择人员的选择控件,当选择多个人时(50多个的时候),返回没有错误现象,而再一次打开的时候就报404错误.看到这个错误非常纳闷,无法下手,只 ...
- url传参中文乱码解决
url传参request.setCharacterEncoding("utf-8");无法解决中文乱码问题 解决方法: 修改tomcat---conf----server.xml文 ...
- URL传参时中文参数乱码的解决方法
URL传参时,中文参数乱码的解决: 今天在工作中遇到了这样的一个问题,在页面之间跳转时,我将中文的参数放入到url中,使用location进行跳转传参,但是发现接收到的参数值是乱码.我的代码是这样写的 ...
- tornado 02 输出、输入和URL传参
tornado 02 输出.输入和URL传参 一.输出 write输出到页面 #write可以接受的对象 #write() 可以接受3种对象:bytes Unicode字符(二进制字符) 字典 #如果 ...
随机推荐
- mybat-大文件的存取
在mybatis中存储大文件可以直接存 取的时候取出来的是二进制 1.在实体类中添加大文本和图片 package com.java1234.model; public class Student { ...
- pat乙级1060
将数组排序后从大到小遍历,设置一个递增的变量t,当v[i] > t的时候,说明有t个数大于t,最后一个满足v[i] > t的t即为所求结果. #include <iostream&g ...
- 微信小程序 尺寸单位px与rpx之间的转换(入门篇)
1.rpx:微信小程序中的尺寸单位rpx(responsive pixel):可以根据屏幕宽度进行自适应.规定屏幕宽度为750rpx. 微信官方建议视觉稿以iphone6为标准. 2.个人示例测试: ...
- constraint的一些用法总结
主要就是增加约束的 以下几种约束 .并 一一列举: 1.主键约束: 要对一个列加主键约束的话,这列就必须要满足的条件就是分空 因为主键约束:就是对一个列进行了约束,约束为(非空.不重复) 以下是代码 ...
- 未能加载文件或程序集“System.Web.Http, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)解决办法
1.查看引用处是否确实引用, 2.查看<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1& ...
- Android(java)学习笔记84:SQLiteDatabase的query方法参数
1. SQLiteDatabase的query方法: public Cursor query (boolean distinct, String table, String[] columns, St ...
- 【BZOJ3930】[CQOI2015] 选数(容斥)
点此看题面 大致题意: 让你求出在区间\([L,H]\)间选择\(n\)个数时,有多少种方案使其\(gcd\)为\(K\). 容斥 原以为是一道可怕的莫比乌斯反演题. 但是,数据范围中有这样一句话:\ ...
- Drupal常用的模块
CCK (Content Construction Kit ) : 添加字段模块 Views:生成列表 Tinymce:(Wysiwyg Editor) 常用的编辑器之一 Ajax Form Buil ...
- webpack4.x ,1基本项目构建 详解
1.先创建个文件夹 比如叫 webApp 用编译器打开 2.安装全局的webpack 和webpack-cli 及 webpack-dev-server 命令如下 npm install webpac ...
- node 日志分割-pm2-logrotate
使用pm2-logrotate进行pm2日志切割,测试是按照文件大小1k切割: 安装 pm2 install pm2-logrotate 设置 重启 截图 截图是按照文件大小分割,如果文件小于设置分割 ...