背景:

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地址传参中特殊符号的转码和解码的更多相关文章

  1. 解决使用JavaScriptConvert转换对象为Json时,中文和&符号被转码的问题

    描述:比如 对象为var data=new {url="http://www.baidu.com?a=b&c=d"} 使用JavaScriptConvert序列化为JSON ...

  2. url地址传参中文乱码处理

    1.将字符串转码:new String(“xxxxx”.getBytes("iso-8859-1"),"utf-8") 这种转码方式有很大的弊端,因为它是使用指 ...

  3. URL地址传参乱码

    1.页面使用javascript的方法encodeURIComponent对需要转码的字符进行两次转码,如:encodeURIComponent(encodeURIComponent("** ...

  4. postman使用get请求的url地址传参中文乱码问题

    编码之后

  5. js中post中文参数转码和解码

    作为基础知识和血淋林的教训,前端一定要记得post请求时将参数中带有中文的部分进行转码!! var str='宋宇·特弱夫斯基'; //转码: encodeURI(encodeURI(str)) ; ...

  6. URL中特殊符号的处理

    问题描述 我们在对接第三方系统的时候通常需要get或post来传输数据,但此时如果参数中存在&% #*!包括空格等特殊符号的时候就无法正常请求具体表现在参数获取不正确或者获取不到参数,甚至有时 ...

  7. vue中去掉url地址栏中的#符号

    要去掉vue中访问地址中的#符号可以在路由器中设置路由模式为history: export default new Router({ mode:'history', routes: [ { path: ...

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

    例如实际请求URL如下: http://www.douwansha.com/mdeditor?data=[{"address":null,"name":&quo ...

  9. C#.net地址传参汉字乱码解决方案

    C#.net地址传参汉字乱码解决方案   web.config文件: <system.web> <globalization requestEncoding="GB2312 ...

随机推荐

  1. jsp:jsp包含文件的两种方式

    第一种:include指令 include指令:当JSP转换成Servlet时引入指定文件(指令元素),这是一种静态包含,它运行的时候不会单独编译成.class文件,它生成一个新的整体.class文件 ...

  2. Java问题定位之如何借助线程堆栈进行问题分析

    在大型的应用中,线程堆栈打印出来特别多,如何从众多的信息中找到真正有用,有价值的信息,我们需要一定的技巧.本文对此详细介绍. 我们可以从三个方面分析:堆栈的局部信息,一次堆栈的统计信息,多个堆栈的对比 ...

  3. vos设置可呼出手机或固话

    问题: 默认公司只让呼出手机号码,但有的客户要求能打固话,怎么办? 落地网关——补充设置——落地前缀——落地被叫改写规则 在改写规则里添加固话号段即可 具体案例: 5201——1表示让520号段只能拨 ...

  4. Python基础学习之标识符

    1.合法的Python标识符 Python标识符字符串规则和其他大部分用C编写的高级语言相似: 第一个字符必须是字母或下划线(_) 剩下的字符可以是字母和数字或下滑线 大小写敏感 标识符不能以数字开头 ...

  5. mysql : 修改数据库权限

    解决步骤 第一步,点击用户 注意!!! 编辑权限,在我们设置权限之前,我们需要先重新加载才能生效, 如果不用编辑的话,直接按重新载入编辑,这个相当于保存. 中文意思(注意看那段话) 第二步 选择要处理 ...

  6. TP5.1:数据库的增删改查操作(基于面向对象操作)

    我们现实中对数据库的增删改查操作,都是使用模型类进行操作的(表名::),也就是面向对象操作,只有底层的代码用的是数据库操作(Db::table('表名')) 下面我将贴出模型类进行的增删改查操作,通过 ...

  7. Python开发第五篇

    面向对象程序设计 面向过程编程:就是分析问题的解决步骤,按部就班的编写代码解决问题 函数式编程:就是把代码封装到函数中,然后在使用时调用封装好的函数 面向对象编程:把一类事物所共有的属性和行为提取出来 ...

  8. NYOJ 士兵杀敌(1~5)

    士兵杀敌(1): http://acm.nyist.net/JudgeOnline/problem.php?pid=108 分析:前缀和 #include <bits/stdc++.h> ...

  9. 用蒙特卡洛方法计算派-python和R语言

    用蒙特卡洛方法算pi-基于python和R语言 最近follow了MOOC上一门python课,开始学Python.同时,买来了概率论与数理统计,准备自学一下统计.(因为被鄙视过不是统计专业却想搞数据 ...

  10. spfa判负权边

    spfa判负环 如果一个点在spfa中被入队了大于n次 那么,我们就能肯定,有负环出现. 因为一个点入队时,他肯定被更新了一次. 所以........ 如果不存在负权环.这个点最多被更新节点数次 我们 ...