URL地址传参中特殊符号的转码和解码
背景:
URL传参在web开发中很常见,一般来说这种方式并不推荐,原因就是浏览器多种多样,各家浏览器对URL地址的解析的表现很不一样,特别是当参数有非ASCII字符、英文字母、阿拉伯数字时。
在CRM系统中,有一个”DFKbtn”的按钮,它的作用是将用户在CRM界面填写的一些参数传递到DFK的页面中去。这个按钮的方法是这样的:
/***********分割线***********/
window.open(url + "aam/acv/asd/login.do?
name=@[用户名]&&Customer=@[客户名]&&customerId=@[客户ID]");
/***********分割线***********/
其中的用户名,客户名,客户ID都是跟在url地址后面的参数。客户名对应DFK的客户名称。其中客户名这个参数的值就有可能出现一些特殊符号,比如键盘上的”+”,”@”,”#”,空格等等。
实际使用的时候发现,出现这些特殊符号的时候,传递到DFK的客户名称会出现错漏,比如,如果客户名含有空格,客户名=”2.4寸 项目”,DFK页面接收到的客户名称就是” 2.4 ”,空格后面的值都没有。如果客户名=” 2.4寸项目+TPLC”,那么客户名称=” 2.4寸项目”,加号后面的值都没有。如果客户名=” 2.4寸项目# TPLC”,那么点击”DFKbtn”按钮就会直接报错,显示服务器异常。除上述符号外,!@#$%^&*””等符号都不能正常传递。
原因:
url需遵守http/https协议,http协议中保留了一些符号作为特殊用途,比如”+”是作为连接符,”&”是作为参数连接符,,”/”作为路径分隔符,空格作为保留字符。如果url地址本身或者是url携带的参数中含有这些特殊符号,那么url在使用时就需要根据不同的情况来进行地址解析,具体行为表现可以参考http://blog.csdn.net/scyatcs/article/details/26766437 这里就不再赘述。由于网络编程中url解析跟网站页面字符集、网站服务器编码字符集、浏览器默认字符集都有关系,因此为了最大限度的保留我们输入的值,需要对传递的参数进行编码,防止浏览器对参数进行篡改,变成乱码。
最方便的方式是在页面javascript中使用URL编码函数,类似这样:
/***********分割线***********/
window.open(url + “aam/acv/asd/login.do?
name=@[用户名]&&Customer=”
+encodeURIComponent(@[客户名])
+”&&customerId=@[客户ID]"
);
/***********分割线***********/
其中蓝色部分就是URL编码函数中的一种。选择该函数是因为它编码的字符最多,大部分符号都可以被编码。
这样编码以后,用户填写的项目名是什么,报DFK得到的客户名称就是什么。比如客户名=” 2.4寸 项目# TPLC+SAC”,客户名称=” 2.4寸 项目# TPLC+SAC”。
需要注意的是,有两个符号是一定不要出现在url参数或者URL地址中的,一个是””双引号,一个是”\”反斜杠.在编程中,双引号表示取双引号之间的值,在url地址中的双引号会造成地址解析在不恰当的地方断开,所以不能成功解析地址。反斜杠在编程中一个作用是路径分隔符,另一个作用是转义字符,用作转义字符时表示跟在反斜杠后面的字符将不会被转义。比如,项目名=” 2.4寸\项目”,那么客户项目名称=”2.4寸项目”,注意其中的反斜杠并不会被显示。
解决办法:
如上所述,将url地址中的参数用encodeURIComponent进行编码,在不包含双引号和反斜杠的情况下,将会传递正确的值,而接收方不需要做任何改动。
URL地址传参中特殊符号的转码和解码的更多相关文章
- 解决使用JavaScriptConvert转换对象为Json时,中文和&符号被转码的问题
描述:比如 对象为var data=new {url="http://www.baidu.com?a=b&c=d"} 使用JavaScriptConvert序列化为JSON ...
- url地址传参中文乱码处理
1.将字符串转码:new String(“xxxxx”.getBytes("iso-8859-1"),"utf-8") 这种转码方式有很大的弊端,因为它是使用指 ...
- URL地址传参乱码
1.页面使用javascript的方法encodeURIComponent对需要转码的字符进行两次转码,如:encodeURIComponent(encodeURIComponent("** ...
- postman使用get请求的url地址传参中文乱码问题
编码之后
- js中post中文参数转码和解码
作为基础知识和血淋林的教训,前端一定要记得post请求时将参数中带有中文的部分进行转码!! var str='宋宇·特弱夫斯基'; //转码: encodeURI(encodeURI(str)) ; ...
- URL中特殊符号的处理
问题描述 我们在对接第三方系统的时候通常需要get或post来传输数据,但此时如果参数中存在&% #*!包括空格等特殊符号的时候就无法正常请求具体表现在参数获取不正确或者获取不到参数,甚至有时 ...
- vue中去掉url地址栏中的#符号
要去掉vue中访问地址中的#符号可以在路由器中设置路由模式为history: export default new Router({ mode:'history', routes: [ { path: ...
- URL 传参中需要处理的特殊字符
例如实际请求URL如下: http://www.douwansha.com/mdeditor?data=[{"address":null,"name":&quo ...
- C#.net地址传参汉字乱码解决方案
C#.net地址传参汉字乱码解决方案 web.config文件: <system.web> <globalization requestEncoding="GB2312 ...
随机推荐
- Linux命令之创建文件夹3
1)mkdir fyr即可在当前目录下创建一个文件夹 2)在fyr文件夹下创建一个子目录 mkdir fyr/fyr1 注意:如果不存在父层目录直接创建对应父层目录下的子目录mkdir FYR/f ...
- 3.tomcat
1.进入网站http://www.apache.org 2.选择 3.关闭防火墙才可以让别人访问自己
- 通过windows计划任务和Dos批处理备份文件
目的: 1.计划每天每半小时备份1次,每天8点开始,执行12小时,20点结束. 2.定期删除历史备份文件,由于每天有多个时间段备份,删除前只保留当天最后一个备份. 说明: 由于删除的操作只有每天第一次 ...
- PHP:__get()、__set()、__isset()、__unset()、__call()、__callStatic()六个魔术方法
哎呀呀,今天小仓鼠学到了魔术方法,简称魔法,哈哈哈哈,神经病啊~ 平时在面试的时候,也会遇到问魔术方法有哪些的问题哦!今天我们来了解一下下~ 1.__get() 形式: __get($objName) ...
- 在你的andorid设备上运行netcore (Linux Deploy)
最近注意到.net core 的新版本已经开始支持ARM 平台的CPU, 特意去Linux Deploy 中尝试了一下,真的可以运行 Welcome to Ubuntu 16.04 LTS (GNU/ ...
- 数长方形有多少个?POJ(1693)
题目链接:http://poj.org/problem?id=1693 解题报告: 随机选两根横的,再找一下与这两根横线相交的竖线有多少根,m,那么就有(m-1)*m/2个长方形. #include ...
- Laravel5 构造器高级查询条件写法
<?php #DB 高级查询 // select * from table where A and B or C $all_data = DB::table("shopnc_goods ...
- Spring boot 异常处理配置
1. 新建Maven项目 exception 2. pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0&quo ...
- HttpServletRequest request 获取form参数的两种方式
@RequestMapping(value="/pay",method = RequestMethod.POST) public String buildRequest(HttpS ...
- P2065 [TJOI2011]卡片
真·会了网络流,忘了匈牙利 一共两种颜色,很容易想到二分图劈配 虽然这题数据水 但是,数据强的话肯定会卡掉的. 为什么? 我暴力质因数都过了 我们可以在两边的数与质因数相连.然后跑网络流. #incl ...