url的三个js编码函数escape(),encodeURI(),encodeURIComponent()

网址及查询字符串中包含中文时,一般会进行url编码,常用的有三种编码方式esacpe、encodeURI、encodeURIComponent三种方式;

无论网页的原始编码是什么,一旦被Javascript编码,就都变为unicode字符.

1.escape()

escape()实际上并不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。

例如:

escape("小明");
"%u5C0F%u660E"

escape()对应的解码函数是unescape();

escape()不对“+”编码。但是网页在提交表单的时候,如果有空格,则会被转化为+字符。服务器处理数据的时候,会把+号处理成空格。所以,使用的时候要小心。

2.encodeURI()

encodeURI()会对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号“; / ? : @ & = + $ , #”,也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。

encodeURI("小明");
"%E5%B0%8F%E6%98%8E"
encodeURI("http://www.example.com?name=小明");
"http://www.example.com?name=%E5%B0%8F%E6%98%8E"

encodeURI()对应的解码函数是decodeURI()

encodeURI()不对单引号'编码。

3.encodeURIComponent()

encodeURIComponent()与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。

因此,“; / ? : @ & = + $ , #”,这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。

encodeURIComponent("小明");
"%E5%B0%8F%E6%98%8E"
encodeURIComponent("http://www.example.com?name=小明");
"http%3A%2F%2Fwww.example.com%3Fname%3D%E5%B0%8F%E6%98%8E"

encodeURIComponent()对应的解码函数是decodeURIComponent()。

encodeURIComponent()相比encodeURI()要更加彻底。

总结:

 

escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如"小明"的返回结果是"%u5C0F%u660E",escape()不对"+"编码 主要用于汉字编码,现在已经不提倡使用。

encodeURI()是Javascript中真正用来对URL编码的函数。 编码整个url地址,但对特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码。对应的解码函数是:decodeURI()。

encodeURIComponent() 能编码"; / ? : @ & = + $ , #"这些特殊字符。对应的解码函数是decodeURIComponent()。

假如要传递带&符号的网址,用用encodeURIComponent()比较合适

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值