一、什么是URL编码规则
1.1、URL的构成
序号 | URL的构成部分 | 说明 |
1 | Scheme(方案) | 表示浏览器请求资源必须使用的协议(一般为:http或https协议) |
2 | Domain Name(域名) Port(端口) | Authority(权威)由域名(也可以是ip地址)和端口组成 |
3 | Path to resource(资源路径) | 表示当前查看的Web 服务器上具体资源的路径 |
4 | Paramerters(参数) | 表示提供给 Web 服务器的额外参数,这些参数使用 & 符号分隔的键/值对列表。在返回资源之前,Web 服务器可以使用这些参数来执行额外的操作。每个 Web 服务器都有自己关于参数的规则。 |
5 | Anchor(锚点) | 表示是资源本身的另一部分的锚点。锚点表示资源中的一种“书签”,给浏览器显示位于该“加书签”位置的内容的方向。例如,在 HTML 文档上,浏览器将滚动到定义锚点的位置;在视频或音频文档上,浏览器将尝试转到锚代表的时间。值得注意的是,# 后面的部分(也称为片段标识符)不会随请求被发送到服务器 |
1.2、URL编码规则
URL的编码规则一般是体现在URL中的【参数】模块,该参数模块固定使用键值对的形式进行传参,多个键值对之间使用【&】符号分隔(如:name=中国%27or+1%3D1+%23&submit=查询)。
Web 命名和寻址概述(URI、URL、 ...) (w3.org)https://www.w3.org/Addressing/w3.org/Addressing/rfc1738.txthttps://www.w3.org/Addressing/rfc1738.txtASCII 表 | 菜鸟教程ASCII(发音:,American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本延伸美国标准信息交换码则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC 646。 ASCII 由电报码发展而来。第一版标准发布于1963年 ,1967年经历了一次主要修订[5][6],最后一次更新则是在1986年,至..https://www.runoob.com/w3cnote/ascii.html
由于URL设计之初是按照ASCII码为基础进行设计的,而ASCII码只支持128个字符;其中33个字符无法显示(编号范围是0-31和127(0x00-0x1F和0x7F)),只有95个可显示的字符(即从可显示字符编号范围是32-126【0x20-0x7E】)。
那也就是说超出ASCII码的内容就没有办法正常显示,特别是对于国内使用的中文来说尤其明显,此时就交给应用程序(即:浏览器)来进行处理(目前浏览器对于超出ASCII码范围的内容是进行编码为百分比符号+16进制的2位数据显示【如:%E4%B8%AD 表示中 %E5%9B%BD 表示国】)但是如果直接传递特殊字符如(=、&、#)等内容给服务器,会导致url服务器无法区分导致异常,因此,也需要对这些特殊字符进行编码为百分比符号+16进制的2位数据显示。
如上图RFC1738文件中的描述(只有字母和数字(即:0-9a-zA-Z)、一些特殊符号“$-_.+!*'(),”[特殊符号中不包含双引号]、以及某些保留字,才可以不经过编码直接用于URL)。
二、URL中不用编码的内容
除了如下列出的四种类型内容不用编码外,其他的所有内容都需要编码。
序号 | URL中不用编码的内容类型 |
1 | 数字(0-9) |
2 | 字母(a-zA-Z) |
3 | 4个特殊符号(-_.~ ) |
4 | 保留字符(! * ' ( ) ; : @ & = + $ , / ? # [ ]) |
三、URL中常见特殊字符编码与编解码工具
3.1、URL中常见特殊字符的编码表
序号 | URL中常见特殊字符 | URL中常见特殊字符编码后的16进制数 |
1 | 空格 | %20 |
2 | ! | %21 |
3 | " | %22 |
4 | # | %23 |
5 | $ | %24 |
6 | % | %25 |
7 | & | %26 |
8 | ' | %27 |
9 | ( | %28 |
10 | ) | %29 |
11 | * | %2A |
12 | + | %2B |
13 | , | %2C |
14 | - | %2D |
15 | . | %2E |
16 | / | %2F |
17 | : | %3A |
18 | ; | %3B |
19 | < | %3C |
20 | = | %3D |
21 | > | %3E |
22 | ? | %3F |
23 | @ | %40 |
24 | [ | %5B |
25 | \ | %5C |
26 | ] | %5D |
27 | ^ | %5E |
28 | _ | %5F |
29 | { | %7B |
30 | | | %7C |
31 | } | %7D |
32 | ~ | %7E |
3.2、URL中字符的编码与解码工具
URL在线编码解码https://stackoverflow.org.cn/urlencode/#google_vignetteRFC 3986: Uniform Resource Identifier (URI): Generic Syntax (rfc-editor.org)https://www.rfc-editor.org/rfc/rfc3986
https://github.com/guyoung/CaptfEncoderhttps://github.com/guyoung/CaptfEncoderhttps://github.com/guyoung/CaptfEncoder/releaseshttps://github.com/guyoung/CaptfEncoder/releases