URL传值关键字被转义

简介:   最近项目中用到了不少URL传值,普通的都没问题,昨天不经意间发现传值之前的值是“c++”,接收之后就变成“c”了。刚开始以为我的URL写错了,检查之后发现也没有问题,而且传不带+号的值也没有任何问题。

  最近项目中用到了不少URL传值,普通的都没问题,昨天不经意间发现传值之前的值是“c++”,接收之后就变成“c”了。刚开始以为我的URL写错了,检查之后发现也没有问题,而且传不带+号的值也没有任何问题。自己猜想是不是因为“+”比较特殊导致的问题啊,虽然基本上可以断定就是“+”出的问题,但是这个符号又不能避免,头大了一下午也没想出具体的解决办法。

  直到今天早上,不经意间发现班上某位女同学在逛淘宝,具体是谁我就不点名了。我发现淘宝中也是用的URL传值,大家都承认淘宝网站做的比较成功,于是就想淘宝也肯定遇到过这样的情况。真实踏破铁鞋无觅处啊,回到座位上自己也打开淘宝搜索了一下“c++”,果然大有不同。

  我自己的URL是:http://localhost:37619/EvaluationStudentAssess/StudentAssess?CourseName=c++&TeacherCourseID=sdaf

  淘宝的URL是:http://s.taobao.com/search?q=c%2B%2B&commend=all

  我的“++”到了淘宝就成了“%2B%2B”,此事必有蹊跷,于是我把自己地址中的”+“也换成了“%2B”果然可以正常传值。有事一番搜索,才URL在传递的时候URL中的字符必须是ASCII码字符,而ASCII码字符又比较少,因此URL中经常会包括以下ASCII以外的字符如:非英文字符,特殊符号,汉子等。因此“+” "#" "&"等这些特殊符号再被传递的过程中就变成空格了。就导致我们想要传递的值到最后不是我们想要的了。要想保证正常使用,就必须对URL进行转换,这个过程叫做URL编码,实质上就是将URL中的非ASCII码字符转化为ASCII码字符。

  由于URL中的字符总是不固定的,那我们怎样根据不同情况动态的将“+”换成“2B%”呢?一下是我用到的解决办法,大家有其他方法欢迎互相交流。

  通过正则表达式匹对含有特殊符号的内容,然后用replace()函数替换:

  

<span style="font-family:KaiTi_GB2312;"><span style="font-family:KaiTi_GB2312;font-size:18px;">r = r.replace(/\+/g, '%2B');//.replace(/\#/g, '%23').replace(/\&/g, '%26');</span></span>
  这里只替换了“+”部分,如有需要可自行扩展。

  问题是解决了,但是如果没有留心或者测试的数据里面没有这些特殊符号,很有可能就会交给用户有问题的产品,一旦用户的数据中有这些敏感数据,系统的问题可能给用户带了巨大的损失,这些问题也并不是说细心就可以避免的,关键还得积累经验,吸收教训,相信有这次的总结以后再有传值问题肯定会拿一些敏感数据去测试,这样提早暴露问题,才能尽早找到解决方案。

  

目录
相关文章
|
5月前
|
存储 SQL Python
`urllib.parse`模块是Python标准库`urllib`中的一个子模块,它提供了处理URL(统一资源定位符)的实用功能。这些功能包括解析URL、组合URL、转义URL中的特殊字符等。
`urllib.parse`模块是Python标准库`urllib`中的一个子模块,它提供了处理URL(统一资源定位符)的实用功能。这些功能包括解析URL、组合URL、转义URL中的特殊字符等。
|
移动开发 小程序 JavaScript
微信小程序学习实录7(H5嵌入小程序、获取微信收货地址、数组对象url传值、js获取url参数)
微信小程序学习实录7(H5嵌入小程序、获取微信收货地址、数组对象url传值、js获取url参数)
348 0
url参数+,&,=,/等转义编码
  url出现了有+,空格,/,?,%,#,&,= 等特殊符号的时候,可能在服务器端无法获得正确的参数值。 案例:   如果我们想让barcodevalue的参数是http://www.baidu.
7156 0
|
编解码 JavaScript iOS开发
iOS中URL的解码和转义问题
在iOS开发中,使用NSURLConnection去请求google places api时,如果请求的url中包含中文,则返回的结果为空,URL不能被google识别。NSString *_urlString = @"http://maps.
1360 0
|
Web App开发 网络架构 iOS开发
|
JSON JavaScript Java
(java gui) 和 (网页 js) 通过url传值(如json)时,注意问题
(java gui) 和 (网页 js)  通过url传值时,如果不涉及特殊字符可以不进行编码, 但是如果有特殊字符,比如中文,及符号 就要进行编码。 java 使用 java.net.URLEncoder.encode(str, "UTF-8");编码, java 使用java.net.URLDecoder.decode(str,"UTF-8");解码, js 使用decodeU
1333 0
|
前端开发 JavaScript 数据格式
JQuery ajax url传值与data传值的区别
url传中文,乱码,即便charset为 UTF-8, $.ajax({    type: "POST",    cache: false,    url: "/ProductTypeAndCat/AddType?typeName=" + typeName,    contentType: "application/x-www-form-urlencoded; charset=UTF-8",    datatype: "JSON",}); data传中文,正确。
806 0
|
.NET 开发框架 C#
2个页面间不通过Session与url的传值方式。
下面是全部代码,已经编译通过。Chuandi(传递)是名字空间 WebForm1:&lt;%@ Page language="c#" Codebehind="WebForm1.aspx.cs" Inherits="chuandi.WebForm1" %&gt;&lt;HTML&gt; &lt;HEAD&gt;  &lt;title&gt;WebForm1&lt;/title&gt; &lt;/
1176 0