js中如何对url进行编码和解码
作者:草字 发布时间:2023-07-22 03:45:08
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("我爱你")
来源:https://primarycolor.blog.csdn.net/article/details/111172160


猜你喜欢
- 这篇文章将介绍在Python中使用 "frozenset "函数的指南,该函数返回一个新的frozenset类型的Pyt
- 最近开发的telemetry采集系统上线了。听起来高大上,简单来说就是一个grpc/udp服务端,用户的机器(路由器、交换机)将它们的各种统
- <input type=button value=刷新 onclick="window.location.reload()&
- 1、初始化在这章,你将学到Flask应用程序的不同部分。同时,你将编写和运行你的第一个Flask web应用程序。所有的Flask应用程序都
- 如果有人问你,GET和POST,有什么区别?你会如何回答?真实案例 前几天有人问我这个问题。
- 环境内容:Pyhon版本:3.7.1scikit_learn==0.20.0graphviz==0.8.4numpy==1.15.3pand
- 来做一个快速测验-以下代码输出什么?vals := make([]int, 5)for i := 0; i < 5; i++ { va
- 这两天终于忍不住的去实验了一下,为什么网页的字体有时会显示成超级无敌难看的宋体呢?其实宋体不难看,难看的只是把它放在Leopard下,没有点
- 前言最近很多新入职的同事问这个问题,特别是通过 homebrew 自动安装的 mysql ,其版本默认已经是 8.0 了,由于增加了一些安全
- 取余函数 PHP取余函数 PHP两个取余 MOD(x,y) x%yMOD例如:9/3,9是被除数,3为除数.mod函数是一个求余函数,其格式
- 1、golang中获取请求接口中数据(GET)方式一: API参数 ctx.Param(name string)或者ctx.Params.B
- python将a.txt的内容复制到b.txt 中# 1. 用r方式打开a.txtf = open("a.txt",&q
- 前言本文主要是积累一下在使用前端的watch开发过程中遇到的问题点和经验。一、watch是什么根据本人的理解,它就是一个 * ,就是说监听的
- 计算字符串中所有数字的和,字符串中有数字和字母组合而成如果出现连续数字,按照一个数操作具体解释在代码行里:def sum_str(str1)
- 一、开发环境python 3.6.6opencv-python 4.5.1二、设计要求1、使用opencv-python对人脸口罩进行检测三
- 导语"盘子里最后一块肉给你 一 冰激凌的第一口给你 一手机最后的10%电量给你!"哈喽大家好!我是木木子,我要开始给大家
- 这一篇笔记介绍 Django 系统 model 的外键处理,ForeignKey 以及相应的处理方法。这是一种一对多的字段类型,表示两张表之
- 特殊属性Python中对象包括很多双下划綫开始和结束的属性,这些特殊属性,有特殊用法。特殊方法含义obj.__dict__对象的属性字典ob
- 我们搜集金融数据,通常想要的是利用爬虫的方法。其实我们最近所学的class不仅可以进行类调用,在获取数据方面同样是可行的,很多小伙伴都比较关
- 本文实例讲述了PHP实现的简单排列组合算法应用。分享给大家供大家参考,具体如下:一、问题:给你一个40斤的西瓜,给3个人分,有多少种分法?二