fixmint
ZH

URL 百分号编码详解:%20、+ 与 %2F 到底是什么意思

作者: · · 更新于 2026年11月8日 · 阅读约 5 分钟

百分号编码会把 URL 无法安全承载的字符,写成一个百分号加上其字节值(十六进制)的形式。空格变成 %20,和号变成 %26,斜杠变成 %2F。这种编码能保护链接的结构,因为 & 和 = 等字符负责分隔查询字符串的各个部分。

URL 编码与解码URL里全是%20这类编码免费使用

哪些字符可以保持原样

URL 所基于的 URI 标准(RFC 3986)规定,有些字符无需处理:字母 A 到 Z 与 a 到 z、数字,以及四个符号 - _ . ~。这些字符永远不需要编码。其他字符在 URL 中承担着一定作用:冒号分隔协议与其余部分,斜杠分隔路径各段,问号标示查询的开始,井号标示片段的开始,& 和 = 则把查询划分为名称和值。承担结构作用的字符,如果要把它当作数据使用,就必须编码。

这就是为什么同一个字符在某处需要编码,在另一处却不需要。在查询值中,和号必须写成 %26,否则链接会在错误的位置被切断。而在链接的路径中,它只是一个普通字符。

非英文字母

基础英文字母之外的字母,会按 UTF-8 字节编码,每个字节写成一个百分号编码。café 中的 é 对应两个字节 C3 和 A9,因此写成 %C3%A9,整个词就是 caf%C3%A9。

一个简单的例子能让规则更具体。文本 a b&c=d/é 作为组件编码后,变为 a%20b%26c%3Dd%2F%C3%A9。凡不是安全字母、数字或符号的字符都会被编码:空格、和号、等号、斜杠以及带重音的字母。

组件编码还是整个 URL

两种编码各有用途。组件编码会把所有保留字符都视为数据,适用于单个值,例如搜索词或链接中的文件名。把“rock & roll”作为搜索词编码后得到 rock%20%26%20roll,因此和号保留在值之内。

整个 URL 编码会保留结构。对 https://example.com/a b 编码后得到 https://example.com/a%20b,斜杠和冒号保持不变。它适用于需要修正为有效地址的完整网址,而不适用于放在链接内部的值。

正因如此,URL 编码与解码工具 提供了 Component 和 Full URL 两种设置。整个 URL 的解码同样会保留已转义的结构字符,如 %26 和 %3D,因此解码后链接依然有效。

加号与表单数据

网页表单使用另一种约定。当表单以表单数据提交时,空格会写成 + 而不是 %20,而字面上的加号则写成 %2B。因此短语 C++ tips 在表单数据中变为 C%2B%2B+tips,在普通的组件编码中则为 C%2B%2B%20tips。

解码也存在同样的区别。在查询字符串中,+ 通常表示空格;在链接的路径中,+ 就是加号。只有勾选 Use + for spaces (form data) 时,工具才会把 + 读作空格,因此路径以及加号确有意义的值,应保持该选项关闭。

读懂很长的查询字符串

链接常在问号之后携带设置。看这个例子:

https://shop.example/search?q=red%20shirt&size=M&tag=summer%2Bsale

解码后,它表示搜索的是 red shirt,尺码是 M,标签是 summer+sale。%2B 仍是加号,因为它原本就是编码过的。把链接粘贴到 URL 编码与解码工具 中,工具会在解码后列出每个名称和值,长链接因此更容易读懂。如果你只想要去掉跟踪设置后的较短地址,请先 清理链接。

重复编码

最常见的错误是对同一个值编码两次。对文本 %20 再次编码会得到 %2520,因为百分号本身被编码成了 %25。页面随后会在值中查找字面的 %20,搜索或页面便无法匹配。请只解码一次并检查结果,只在确实需要时才编码。

损坏的转义

百分号之后必须紧跟两个十六进制数字,带重音字母的字节还必须构成有效的 UTF-8。如果链接被截断,或文本中误输入了多余的百分号,就可能出现类似 %E0%A4%A 的损坏转义。工具会解码能够解码的部分,原样保留损坏的字节,并报告有多少无法解码。它不会在遇到第一个错误时就停止。

特殊情况

  • 手动输入的链接中有空格。 浏览器地址栏会自动为空格编码,但从文档中复制的链接仍可能含有原始空格。转发链接之前,请先对其编码。
  • 非英文域名。 这类域名使用另一套系统,即 punycode。对路径或查询进行编码并不会改变主机名。
  • 半个表情符号。 复制不完整时可能只留下一个代理项的一半,它无法被编码。工具会将其替换为替换符号,并告知你已进行替换。
  • 链接中的 Base64。 链接中的 Base64 值遵循其自身规则,用 - 和 _ 代替 + 和 /。参见 Base64 详解。

如何在 fixmint 上操作

  1. 把文本或链接粘贴到 Text or URL 中。
  2. 选择 Encode 或 Decode,再选择 Component(单个值)或 Full URL(整个地址)。
  3. 对于从网页表单复制的链接,勾选 Use + for spaces (form data)。
  4. 对于链接,查看 Query parameters, decoded,以看到每个名称和值。
  5. 复制结果。

快速解答

%20 是什么意思?

空格。它的字节值在十六进制中是 20。

为什么我的链接里是 + 而不是 %20?

这个链接可能来自表单,其中 + 代表空格。选择 “Use + for spaces (form data)” 选项即可正确解码。

为什么我的链接里有 %2520?

这个值被编码了两次。%20 的百分号又被编码成了 %25。解码一次可以还原为 %20,再解码一次即可得到空格。

由 AI 辅助翻译自英文原文。

评论

    还没有评论。快来抢沙发。

    你的评分(可选)

    你的邮箱不会被显示或保存。

    How to Remain Valuable When Intelligence Becomes Cheap 的封面How to Remain Valuable When Intelligence Becomes Cheap

    224页,探讨当AI能完成大部分认知工作时,哪些人类、经济和战略上的优势依然稀缺。

    $3.84在 Gumroad 获取英文阅读