URL 百分比编码:为什么 URL 用 %20 替换空格(RFC 3986 指南)

URL 仅限于严格的 ASCII 字符集。特殊字符(空格、重音符号、& 符号、斜线)必须编码为百分比编码序列(例如,空格 = %20),才能在互联网上安全传输。

URL containing special characters being encoded to percent-encoded safe format

为什么网址需要特殊字符编码

Comparison between RFC 3986 percent-20 and application-form-urlencoded plus encoding for spaces

URL 使用 HTTP 协议通过网络传输。 HTTP 规范(及其前身,互联网协议标准)将 URL 限制为 US-ASCII 字符的子集,特别是字节值在 0x21 到 0x7E 之间的字符。

此范围之外的字符(包括空格、重音字符 (é、ñ、ü)、中文/日文/韩文字符和许多符号)在未经编码的 URL 中并不安全。

为什么要特别使用空格? HTTP 在请求行中使用空格作为方法、URL 和协议版本之间的分隔符:

GET /search?q=hello world HTTP/1.1

服务器将“hello”视为 URL 结尾,将“world”视为 HTTP 版本字符串的无效部分。该网址已损坏。

解决方案:百分比编码(在 RFC 3986 中定义)将不安全字符转换为安全的 %XX 表示法,其中 XX 是十六进制字节值。


百分比编码的工作原理

JavaScript URL encoding API difference between encodeURI and encodeURIComponent functions

Hexadecimal ASCII byte lookup table for the eight most frequently encoded URL special characters

UTF-8 中的每个字符都是一到四个字节。百分比编码将每个字节转换为 % 后跟两个十六进制数字:

字符UTF-8字节百分比编码
空间0x20%20
#0x23%23
&0x26%26
=0x3D%3D
/0x2F]%2F
é0xC3 0xA9%C3%A9
中0xE4 0xB8 0xAD%E4%B8%AD

包含 https://example.com/search 等汉字的网址将变为:https://example.com/%E6%90%9C%E7%B4%A2


保留字符与非保留字符

Reserved versus unreserved URL character set comparison showing characters that must be percent-encoded

非保留字符(切勿对这些字符进行编码): A-Z a-z 0-9 - _ 。 ~ 这些在所有 URL 上下文中都是安全的,并且应始终显示为未编码。

保留字符(用作数据时进行编码,而不是用作分隔符): :/ ? #[]@! $ & ' ( ) * + , ; = 这些字符在网址中具有特殊含义。当它们作为文字数据出现在查询参数值中时对其进行编码。

示例 - 搜索查询网址:

https://example.com/search?q=cats&dogs

这是不明确的 - 查询是“cats”还是“cats&dogs”?使用编码:

https://example.com/search?q=cats%26dogs

现在,& 符号被编码为数据,而不是查询参数分隔符。


ToolDolfen 上的网址编码和解码

ToolDolfen in-browser URL encoder and decoder client-side execution workflow

  1. 打开 URL网址编解码工具。
  2. 要进行编码: 粘贴包含特殊字符的 URL 或 URL 组件。点击“编码”。
  3. 解码:粘贴百分比编码的网址或字符串以查看人类可读的原始内容。

该工具可处理完整 URL 和 URL 组成部分(单个查询参数值)。对于完整的URL编码,仅对非保留字符进行编码;对于组件编码,保留字符也会被编码。

推荐配套指南

从此主题组中探索补充教程和实用程序,以增强您的数字工作流程:

HEX、RGB 和 HSL:CSS 和设计的完整颜色模型指南包含经过验证的标准和浏览器内的实用分步教程强密码的数学:熵、NIST 准则和密码长度具有经过验证的标准和浏览器内的实用分步教程Markdown 到 HTML 转换器指南:GFM 表格、数学和现实世界的陷阱具有经过验证的标准和浏览器内的实用分步教程如何拆分 PDF 文件并提取特定页面范围连接相关数据和媒体的补充跨格式工作流程工具。
推荐实用程序:网址编码器/解码器在浏览器中实时执行此工作流程,实现零服务器上传和 100% 客户端隐私。
URL网址编解码工具
URL网址编解码工具

常见问题解答 (FAQ)

查看关于此操作流程常见问题的快速与权威解答。

URL 中空格的 %20 和 + 有什么区别?

%20 是 URL 中空格的 RFC 3986 标准百分比编码。 + 号是​​查询参数中空格的传统 HTML 表单编码约定 (application/x-www-form-urlencoded)。虽然 + 在查询字符串中得到广泛支持,但 %20 更为普遍正确,建议用于 URL 路径。

是否存在绝对不应在 URL 中编码的字符?

是的。不应对非保留字符(A-Z、a-z、0-9、-、_、.、~)进行编码 — 它们在所有 URL 上下文中都是安全的。保留字符(/、?、#、&、=、@、!、$)在发挥其功能作用(例如,/ 分隔路径段)时不应进行编码。

当我粘贴特殊字符时,为什么我的 URL 会出现 404 错误?

许多 Web 服务器拒绝包含未编码特殊字符的 URL。如果您的 URL 包含空格、方括号、大括号或非 ASCII 字符(重音字母、CJK 字符),请首先使用 URL 编码器对它们进行编码。

Bilal Ahmad