url 传递参数(特殊字符)解决方法

 
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。下表中列出了一些URL特殊符号及编码

 

   十六进制值
1.+URL 中+号表示空格%2B
2.空格URL中的空格可以用+号或者编码%20
3./分隔目录和子目录%2F
4.?分隔实际的 URL 和参数%3F
5.%指定特殊字符%25
6.#表示书签%23
7.&URL 中指定的参数间的分隔符%26
8.=URL 中指定参数的值%3D

解决的方法:
replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符.
而str.replace(//-/g,"!")则可以替换掉全部匹配的字符(g为全局标志)。
replace()

js中替换字符变量如下:

 data2=data2.replace(//%/g,"%25");
 data2=data2.replace(//#/g,"%23");
 data2=data2.replace(//&/g,"%26");



其他一些资料。。。仅供参考。。。

在使用url进行参数传递时,经常会传递一些 中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误。在有些传递页面使用GB2312,而在接收页面使用UTF8,这样接收到的参 数就可能会与原来发生不一致。使用服务器端的urlEncode函数编码的URL,与使用客户端java的encodeURI函数编码的URL,结果就不 一样。

java对文字进行编码涉及 3 个函数: escape,encodeURI,encodeURIComponent ,相应 3 个解码函数: unescape,decodeURI,decodeURIComponent

因 此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用 escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者 encodeURIComponent。

1、   传递参数时需要使用 encodeURIComponent ,这样组合的 url 才不会被 # 等特殊字符截断。

    例如: < language="java">write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'"> 退出 </a>');</>

2、   进行 url 跳转时可以整体使用 encodeURI

例如: Location.href=encodeURI("http://cang.baidu.com/do/s?word= 百度 &ct=21");

3、   js 使用数据时可以使用 escape

例如:搜藏中 history 纪录。

4、   escape 对 0-255 以外的 unicode 值进行编码时输出 %u**** 格式,其它情况下 escape , encodeURI , encodeURIComponent 编码结果相同。

 

最多使用的应为 encodeURIComponent ,它是将中文、韩文等特殊字符转换成 utf-8 格式的 url 编码,所以如果给后台传递参数需要使用 encodeURIComponent 时需要后台解码对 utf-8 支持( form 中的编码方式和当前页面编码方式相同)

escape 不编码字符有 69 个: *+-./@_ , 0-9 , a-z , A-Z

encodeURI 不编码字符有 82 个: !#$&'()*+,-./:;=?@_~ , 0-9 , a-z , A-Z

encodeURIComponent 不编码字符有 71 个: ! ' ()*-._~ , 0-9 , a-z , A-Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值