url中的特殊字符问题

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


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


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

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

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


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


字符

特殊字符的含义

URL编码

#

用来标志特定的文档位置

%23

%

对特殊字符进行编码

%25

&

分隔不同的变量值对

%26

+

在变量值中表示空格

%2B

/

表示目录路径

%2F

/

表示目录路径

%5C

=

用来连接键和值

%3D

?

表示查询字符串的开始

%3F

空格

空格

%20

.

句号

%2E

:

冒号

%3A



原文链接:http://www.360doc.com/content/071128/18/14386_855312.html


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值