utilduck
Home · 开发者 · URL 编码 / 解码

URL 编码 / 解码

粘贴文本或 URL 组件,选择编码或解码,即时查看结果。

结果
-

关于 URL 编码

URL 只能包含有限的 ASCII 字符。空格、和号和非 ASCII 字母必须进行百分号编码——替换为百分号后跟代表该字符字节值的两位十六进制数字。例如,空格变为 %20,字母 ä 变为 %C3%A4。

本工具使用 encodeURIComponent,它编码除字母、数字和 - _ . ! ~ * ( ) 之外的所有内容。这是编码查询字符串参数值或路径段(而非整个 URL)时使用的正确函数。

URL 组件怎么做百分号编码?

对用于 URL 的文字做百分号编码时,把所有不属于非保留字符集(字母、数字以及 - _ . ! ~ * ' ( ))的字符,替换成百分号加两位十六进制数字,表示该字符的 UTF-8 字节值。例:"hello world" 变成 "hello%20world","café" 变成 "caf%C3%A9"。

URL 组件百分号编码与解码步骤

  1. 把输入文字转换成 UTF-8 字节,因为非 ASCII 字符可能由不止一个字节表示。
  2. 逐个检查每个字节;如果它对应非保留字符(A-Z、a-z、0-9、- _ . ! ~ * ' ( )),就保持不变。
  3. 其他所有字节都替换成百分号加两位大写十六进制值,例如空格(0x20)变成 %20。
  4. 把结果重新拼接成一个字符串,这就是原文字经过百分号编码后、可安全用于 URL 的表示。
  5. 解码时,查找 % 后面紧跟两位十六进制数字,把每个都还原成对应字节值,再把这些 UTF-8 字节重新组合成原文字。

百分号编码规则

保留/不安全字节 -> %XX,其中 XX 是该字节的值,以两位大写十六进制数字表示
  • 非保留字符 = A-Z、a-z、0-9、- _ . ! ~ * ' ( )——这些字符永远不会被编码
  • %XX = 百分号加两位十六进制数字,表示原字符 UTF-8 编码中的一个字节

编码结果示例

文字编码后
hello worldhello%20world
a=b&c=da%3Db%26c%3Dd
cafécaf%C3%A9
100% off!100%25%20off!
user@example.comuser%40example.com

常见问题

为什么 encodeURIComponent 不会转义 ! ~ * ' ( ) 这些符号?

这些字符和字母、数字以及 - _ . 一起,被定义为可以直接出现在 URI 组件中的安全字符,在其中没有特殊含义,所以 JavaScript 的 encodeURIComponent 会原样保留它们。而 encodeURI 等函数保留的是另一组更大的字符集,因为它们是用来编码整个 URL,而不是单个组件的。

编码一个 URL 组件和编码整个 URL 有什么区别?

编码单个组件(比如某个查询参数的值)时,应该转义 & 和 = 这类字符,避免它们被误认为是 URL 结构的一部分。编码整个 URL 时则必须保留 :、/、? 和 & 等结构字符不变,这样 URL 才能被正确解析,这也是 encodeURIComponent 和 encodeURI 行为不同的原因。

为什么空格有时编码成 %20,有时又变成 +?

%20 是 URL 路径和 encodeURIComponent 输出中用于表示空格的通用百分号编码。用 + 表示空格是 application/x-www-form-urlencoded 格式的特有惯例,专门用于 HTML 表单提交和查询字符串,并不是通用的 URL 编码规则。

为什么有些输入解码会报错?

当 % 后面没有跟着两位合法的十六进制数字,或者解码出的字节不构成合法的 UTF-8 时,解码就会失败——比如粘贴了一个不完整的百分号序列,像缺了最后一个字节的 %E2%9。请检查输入是否是完整、正确编码的百分号文本。

本工具使用 JavaScript 的 encodeURIComponent/decodeURIComponent 对单个文本值做编码和解码,遵循 RFC 3986 定义的非保留字符集;它不解析或校验完整 URL 的结构(协议、主机、路径、查询等分开的组成部分)。

Sources: RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax

隐私与安全

  • 在浏览器中计算 — 您输入的内容仅在本机设备上计算,不会发送到 utilduck 服务器。
  • 加密连接 — 所有页面均通过 HTTPS 提供,传输过程中无法被读取。
  • 不提供给第三方 — 您输入的内容不会传递给分析或广告服务。
  • 不保存 — 计算结果不会保存到任何服务器,也无需注册账号。

最后更新: 2026-08-17