js中如何对url进行编码和解码

 更新时间:2022年11月11日 17:02:03   作者:草字  
这篇文章主要介绍了js中如何对url进行编码和解码问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

js 对url进行编码和解码

三种编码和解码函数

encodeURI和 decodeURI

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

需要注意的是,它不对单引号’编码。

encodeURIComponent和decodeURIComponent(推荐使用)

它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。

因此,"; / ? : @ & = + $ , #",这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码

escape 和 unescape

对除ASCII字母、数字、标点符号 @ * _ + - . / 以外的其他字符进行编码。

js url二次编码和解码

问题

今天遇到了一个奇怪的问题:在JS中用decodeURI()解析完一串URL编码后发现它依旧是URL编码,看的我一脸懵逼!最后发现参数里面竟然是一个URL二次编码!

类似下面这种形式:

"%25E6%2588%2591%25E7%2588%25B1%25E4%25BD%25A0"

也就是说也解码两次才能得到原码,如下:

//编码结果:%25E6%2588%2591%25E7%2588%25B1%25E4%25BD%25A0
encodeURI(encodeURI('我爱你'))
//解码结果:我爱你
decodeURI(decodeURI("%25E6%2588%2591%25E7%2588%25B1%25E4%25BD%25A0"))

URL编码解码原理

URL编码原理:

这个百度百科上解释的就很好:URL编码就是一个字符ASCII码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如:“\”,它的ASCII码是92,92的十六进制是5c,所以“\”的URL编码就是%5c。

URL二次编码会对生成的编码再做一次编码,还拿“\”为例,一次编码后是“%5c”,再对“%5c”进行编码得到:“%255c”。

二次编码其实就是对%做了编码,后面的字母和数字没变,“%”的URL编码是“%25”,所以二次编码全都是已%25开头的。

注意:encodeURI()仅会将特殊字符转化成URL编码形式,特殊的字符:就是那些不是简单的七位ASCII,如汉字,中文标点,当然也包括%[] {}|等特殊字符。例如:

//结果:123abcABC
encodeURI("123abcABC")
//结果:"520%E9%9B%AA%E7%8B%90"
encodeURI("520雪狐")
//结果:"%25%7C%5B%5D%7B%7D"
encodeURI("%|[]{}")

URL编码原理:就是编码的逆过程,不再赘述。

注意:decodeURI也仅对URL编码解码,普通字符解码后依旧是普通字符,例如:

//结果:"234"
decodeURI('234')
//结果:我爱你
decodeURI("%E6%88%91%E7%88%B1%E4%BD%A0")
//结果:我爱你
decodeURI("我爱你")

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • bootstrap PrintThis打印插件使用详解

    bootstrap PrintThis打印插件使用详解

    这篇文章主要为大家详细介绍了bootstrap PrintThis打印插件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • JS 实现获取验证码 倒计时功能

    JS 实现获取验证码 倒计时功能

    这篇文章主要介绍了JS 实现获取验证码 倒计时功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • javascript之querySelector和querySelectorAll使用介绍

    javascript之querySelector和querySelectorAll使用介绍

    其实关于querySelector和querySelectorAll的介绍说明很多。在此主要是做个记录
    2011-12-12
  • 微信小程序学习总结(四)事件与冒泡实例分析

    微信小程序学习总结(四)事件与冒泡实例分析

    这篇文章主要介绍了微信小程序学习总结(四)事件与冒泡,结合实例形式分析了微信小程序事件、冒泡、数据获取相关机制、原理与操作注意事项,需要的朋友可以参考下
    2020-06-06
  • openlayers 3实现车辆轨迹回放

    openlayers 3实现车辆轨迹回放

    这篇文章主要为大家详细介绍了openlayers 3实现车辆轨迹回放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • 微信小程序数据请求的方式和注意事项详解

    微信小程序数据请求的方式和注意事项详解

    这篇文章主要为大家介绍了微信小程序网络数据请求的方式和注意事项讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • js实现鼠标感应向下滑动隐藏菜单的方法

    js实现鼠标感应向下滑动隐藏菜单的方法

    这篇文章主要介绍了js实现鼠标感应向下滑动隐藏菜单的方法,涉及javascript操作鼠标事件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • js前端导出Excel的方法

    js前端导出Excel的方法

    这篇文章主要为大家详细介绍了js前端导出Excel的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 微信公众号H5支付接口调用方法

    微信公众号H5支付接口调用方法

    这篇文章主要介绍了微信公众号H5支付接口调用方法,微信内H5调用支付接口代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 微信小程序海报绘制示例讲解

    微信小程序海报绘制示例讲解

    这篇文章主要介绍了微信小程序海报绘制示例,海报分享功能在许多应用中应该是很常见的,因为它作为一种常用的应用推广和拉新的方式,下面我们来通过案例学习如何绘制
    2024-05-05

最新评论