使用方法
- 选择“编码”或“解码”。
- 单个值(例如一个查询参数)请选择“组件模式”;完整地址请选择“完整 URL 模式”。
- 输入或粘贴文本。结果会立即显示在右侧(手机上显示在下方)。
- 复制结果,或使用“将输出用作输入”反向操作并检查转换结果。
工作原理
URL 只能包含有限的 ASCII 字符。其他字符,包括空格、带变音符号的字母和表情符号,都要写成百分号转义形式:字符会先转换为 UTF-8 字节,每个字节再写成 % 加两位十六进制数字。空格会变成 %20,é 会变成 %C3%A9,€ 会变成 %E2%82%AC。
组件模式使用 JavaScript 的 encodeURIComponent 和 decodeURIComponent。它会转义所有在 URL 中具有特殊含义的字符,包括 / ? # & = + : 和 @,因此结果可以安全地放入查询参数值或单个路径段中。以下字符不会改变:A–Z、a–z、0–9 和 - _ . ! ~ * ' ( )。
完整 URL 模式使用 encodeURI 和 decodeURI。它假定输入已经是完整 URL,并保留保留字符 ; , / ? : @ & = + $ #,使地址仍然有效。解码时,decodeURI 也会保留这些保留字符的转义形式:%2F 仍然是 %2F,因为将其转换为 / 会改变 URL 的含义。
表单数据选项遵循 application/x-www-form-urlencoded 格式,也就是浏览器提交 HTML 表单时使用的格式:空格会写成 +,而不是 %20。使用此选项解码时,每个 + 都会变成空格;实际的加号必须写成 %2B。
工具不会丢弃无效输入。如果 % 后面没有跟两位十六进制数字,或一串转义无法组成有效的 UTF-8,工具会指出问题所在,并保留你的文本,方便你修正。
示例
将参数值放入查询字符串
要在 https://example.com/search?q=… 中搜索“Rock & Roll”,请在组件模式下只编码参数值:Rock%20%26%20Roll。如果不编码,& 会结束 q 参数,并开始一个名为“ Roll”的新参数。
修正含空格和变音符号的 URL
在完整 URL 模式下,https://example.com/menu/crème brûlée.html 会变成 https://example.com/menu/cr%C3%A8me%20br%C3%BBl%C3%A9e.html。斜杠和冒号保持不变,因此链接仍然有效。
读取日志中的表单数据
服务器日志中显示 name=Jane+Doe&city=S%C3%A3o+Paulo。启用“将 + 视为空格”,并在组件模式下解码,即可读作 name=Jane Doe&city=São Paulo。
常见问题
encodeURI 和 encodeURIComponent 有什么区别?
encodeURIComponent 会转义用于分隔 URL 各部分的字符(/ ? # & = + : @ 等),因此适用于 URL 的单个部分。encodeURI 会保留这些字符,因此适用于完整 URL。对查询参数值使用 encodeURI 是常见错误:值中的 & 或 = 不会被转义,从而破坏查询字符串。
空格应该写成 %20 还是 +?
在 URL 路径中,空格始终写作 %20。在查询字符串中,两种写法都会出现:%20 在任何情况下都有效;而 + 仅在表单编码数据(application/x-www-form-urlencoded)中表示空格,这也是 HTML 表单和许多服务器框架读取查询字符串时使用的格式。如果不确定,请使用 %20。
为什么解码时会报错?
如果 % 后面没有跟两位十六进制数字(例如“50% off”),或者转义后的字节不是有效的 UTF-8,解码就会失败。后一种情况通常表示文本使用了较旧的字符集(例如 Latin-1 将 é 编码为 %E9,而不是 %C3%A9)。错误消息会显示问题所在的位置。
为什么完整 URL 模式没有将 %2F 转换为斜杠?
decodeURI 会有意保留 / ? # & 和 = 等保留字符的转义形式,因为解码这些字符可能改变 URL 各部分的划分方式。要解码所有转义,请使用组件模式。
哪些字符不会被编码?
两种模式都会保留 A–Z、a–z、0–9 和 - _ . ! ~ * ' ( )。完整 URL 模式还会保留 ; , / ? : @ & = + $ 和 #。
隐私
编码和解码完全在浏览器中通过内置 JavaScript 函数完成。您的文本和 URL 不会上传、存储,也不会纳入分析统计。