← 退出

URL 编解码

URL 安全字符互相转换

输出

关于URL 编解码

这个工具把文本按浏览器内置的 encodeURIComponent 规则编码成百分号形式(例如空格变成 %20,汉字变成 %E4%BD%A0 这样的 UTF-8 字节序列),也可以用 decodeURIComponent 把它还原。它适合处理查询参数的值、路径片段或者一段从日志里复制出来的乱码链接。需要注意它只提供这一种编码规则:没有「保留 URL 结构的整体编码」(即 encodeURI)选项,也没有表单风格的「空格转加号」选项,也不会自动识别输入是否已经编码过。

操作步骤

  1. 在「输入(支持多行,每行独立处理)」文本框里粘贴要处理的内容。页面打开时已经放了一个示例链接。
  2. 点击「编码 →」把每一行做百分号编码,或者点击「解码 →」把每一行还原。
  3. 结果出现在下方「输出」框里,这个框是只读的。输出不为空时,右上角会出现复制按钮,点一下即可复制全部输出。
  4. 修改输入后需要再点一次按钮,输出不会随输入自动更新。想把结果当作新的输入继续处理,需要手动复制回输入框。

一个实际例子

对默认的示例 https://example.com/搜索?q=你好 世界 点击「编码 →」,实际得到:https%3A%2F%2Fexample.com%2F%E6%90%9C%E7%B4%A2%3Fq%3D%E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C。可以看到冒号、斜杠、问号和等号也被转义了,这说明这里更适合编码「某一个参数的值」,而不是整条链接。再比如把 a b&c=d/é 编码,得到 a%20b%26c%3Dd%2F%C3%A9,其中 & 变成 %26,避免它被当成参数分隔符。反过来,把 %E4%BD%A0%E5%A5%BD 点击「解码 →」得到「你好」。以上输出都是用同样的函数实际运行得到的。

支持范围与已知限制

  • 编码使用 encodeURIComponent:字母、数字以及 - _ . ! ~ * ' ( ) 保持不变,其余字符都会被转成 UTF-8 的百分号序列,包括 : / ? # & = + 等 URL 分隔符。
  • 不提供 encodeURI 的行为,所以不能一键把完整链接里的中文转义同时保留 https:// 和问号结构。如有这个需求,需要把链接拆开,只编码参数值。
  • 空格会被编码为 %20,不会变成 +。解码时 + 也不会被还原成空格,例如 a+b%20c 解码后是 a+b c。解析表单提交的 application/x-www-form-urlencoded 数据时要自己处理加号。
  • 按换行拆分,每一行独立处理,空行原样保留为空行。适合批量处理一批参数值,但一个跨行的值会被拆开分别编码。
  • 某一行处理失败时,该行输出会变成「[编码失败] 原文」或「[解码失败] 原文」,其他行不受影响。解码失败最常见的原因是百分号序列被截断(例如 %E4%BD 缺了最后一个字节)或者包含非法的 UTF-8 序列,浏览器会报 URI malformed。编码失败则出现在含有孤立代理字符的文本里,很少见。
  • 只做 UTF-8 编码。老系统里常见的 GBK 编码的百分号序列(如 %C4%E3%BA%C3 代表「你好」)解码时通常会报错或者得到乱码,这个工具不提供选择字符集的功能。
  • 对已经编码过的文本再次编码会把 % 变成 %25,出现双重编码。先判断来源再决定按哪个按钮。

常见问题:为什么整条链接编码后不能直接打开?

因为 encodeURIComponent 会把 :// 和 ? 等结构字符也转义。它的设计用途是编码放在链接某个位置里的一小段数据,例如 ?q= 后面的搜索词。正确的做法是保留链接结构,只对参数值单独编码后再拼进去。

常见问题:解码出现「[解码失败]」怎么办?

先检查这一行是否完整:从邮件、聊天软件或者日志里复制时,末尾可能被截断,或者夹带了空格、换行。另外确认原文是不是 UTF-8 编码,GBK 等其他字符集的序列无法在这里还原。如果这一行本来就是普通文本,里面恰好有单独的百分号(例如「完成 50%」),也会触发失败,这类文本不需要解码。

常见问题:加号和 %20 有什么区别?

在 URL 的查询部分,不同系统约定不同:传统表单提交把空格写成加号,而 JavaScript 的 encodeURIComponent 和大多数现代 API 使用 %20。本工具只产生和识别 %20 形式。如果你拿到的字符串里空格是加号,可以先在别处把加号替换成空格再解码。

常见问题:会修改我输入的大小写吗?

编码输出中的十六进制字母是大写(如 %E4),这是 encodeURIComponent 的固定行为。解码时大小写都可以识别。字母和数字本身不会被改写。

隐私与处理方式

编码和解码都在你的浏览器里完成,代码只调用浏览器内置的 encodeURIComponent 与 decodeURIComponent,没有把输入内容发送到任何服务器的请求,也没有保存历史记录。刷新或关闭页面后输入内容就会消失。如果你处理的是带令牌或密码的链接,仍应注意不要在公共设备上留着页面。