什么是 URL 编码?
URL 编码又称百分号编码(percent-encoding),是 RFC 3986 规范中定义的一种机制,用于在统一资源标识符(URI)中表示任意数据。在 URL 里,很多字符——比如空格、斜杠、问号、与号(&),以及非 ASCII 字符——要么具有特殊含义,要么本身就不安全。百分号编码会把每一个这样的字节替换为一个百分号(%),后面再跟上代表该字节值的两位十六进制数字。
如何使用本工具
选择 编码 可将普通文本转换为 URL 安全字符串;选择 解码 则可把百分号编码的字符串还原成可读文本。输入或粘贴你的文本后提交即可。本工具还会同时显示输入和输出的字符长度,让你直观看到编码后文本膨胀了多少。
编码原理详解
非保留字符集为 A–Z a–z 0–9 - _ . ~。凡是不在这个集合内的字节都会被编码:
例如空格的字节值是 32,对应十六进制 0x20,因此会变成 %20。文本会先按 UTF-8 转换为字节,所以多字节字符(如表情符号或带重音的字母)会逐字节进行编码。解码则是反向过程:每一个 %XX 三元组被解析为一个十六进制字节,最后把收集到的所有字节按 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 字节,并且能够正确解码还原。