通过MCP连接 →

输入计算

数学公式

广告

结果

结果
hello%20world%21
输入长度(字符数) 12
输出长度(字符数) 16

什么是 URL 编码?

URL 编码又称百分号编码(percent-encoding),是 RFC 3986 规范中定义的一种机制,用于在统一资源标识符(URI)中表示任意数据。在 URL 里,很多字符——比如空格、斜杠、问号、与号(&),以及非 ASCII 字符——要么具有特殊含义,要么本身就不安全。百分号编码会把每一个这样的字节替换为一个百分号(%),后面再跟上代表该字节值的两位十六进制数字。

展示空格字符映射为百分号编码字节的示意图
在 URL 编码过程中,不安全字符会被转换为 %XX 形式的十六进制字节。

如何使用本工具

选择 编码 可将普通文本转换为 URL 安全字符串;选择 解码 则可把百分号编码的字符串还原成可读文本。输入或粘贴你的文本后提交即可。本工具还会同时显示输入和输出的字符长度,让你直观看到编码后文本膨胀了多少。

编码原理详解

非保留字符集为 A–Z a–z 0–9 - _ . ~。凡是不在这个集合内的字节都会被编码:

$$\text{Output} = \operatorname{encode}\!\left(\text{Text}\right) = \text{each byte} \to \begin{cases} \text{char}, & \text{if unreserved } (A\text{-}Z,\,a\text{-}z,\,0\text{-}9,\,\text{-}\_.\sim) \\ \text{\%XX}, & \text{otherwise (UTF-8 hex)} \end{cases}$$

例如空格的字节值是 32,对应十六进制 0x20,因此会变成 %20。文本会先按 UTF-8 转换为字节,所以多字节字符(如表情符号或带重音的字母)会逐字节进行编码。解码则是反向过程:每一个 %XX 三元组被解析为一个十六进制字节,最后把收集到的所有字节按 UTF-8 还原成文本:

$$\text{Output} = \operatorname{decode}\!\left(\text{Text}\right) = \text{scan} \to \begin{cases} \text{byte}(XX), & \text{for each } \text{\%XX} \\ \text{space}, & \text{for } + \\ \text{char}, & \text{otherwise} \end{cases}\ \text{as UTF-8}$$
字节被拆分为两位十六进制数字,组成百分号编码
每个不安全字节都会变成一个百分号加上其两位十六进制值。

实例演示

hello world! 进行编码:其中的字母 h-e-l-l-o 属于非保留字符,保持不变;空格变成 %20,感叹号(字节值 \(33 = \text{0x21}\))变成 %21。最终结果为 hello%20world%21

常见问题

它会把加号编码成空格吗? 编码时,空格会按 RFC 3986 的方式转为 %20;而解码时,为了兼容表单数据,字面的 + 会被当作空格处理。

为什么有些字符没有被改变? 字母、数字以及四个非保留符号 - _ . ~ 在 RFC 3986 下永远不需要编码。

支持 Unicode 吗? 支持。文本会按 UTF-8 处理,因此 ASCII 之外的字符会被编码为多个 %XX 字节,并且能够正确解码还原。

最后更新: