CodeKitHub
编码工具

URL 在线编码解码

最后更新:

把文本进行百分号编码以便安全放入 URL,或把编码后的 URL 还原成可读形式。支持组件模式(全部编码,用于查询参数值)和完整 URL 模式(保留 :// ? & 结构字符)。全部在浏览器本地运行。

工具介绍

URL 编码(百分号编码)把 URL 中不允许出现的字符替换成 % 加十六进制字节值——空格变成 %20,"你"变成 %E4%BD%A0。没有它,空格、&、? 和中文等字符会破坏 URL 结构,或被服务器错误解析。

实际中有两种需求,本工具都支持:编码要放进查询参数里的值(组件模式——连 / ? & = 也编码),以及编码整个 URL 但保留其结构(完整 URL 模式——保留 :// ? & 不动)。

有个历史遗留问题值得了解:按 URL 标准(RFC 3986),空格的正确编码是 %20,但 HTML 表单提交历来把空格编码成加号——这就是为什么网上 q=hello%20world 和 q=hello+world 两种写法都能见到,也是解码表单数据时有时需要单独处理 + 号的原因。

为什么使用它?

  • 安全拼接查询字符串——含 &、= 或空格的用户输入不会破坏 URL。
  • 解码日志、统计系统或跳转链里的长编码 URL,看清实际内容。
  • 中文、emoji 按 UTF-8 标准正确转码,不乱码。
  • 两种模式,避免误把整个 URL 的 : 和 / 也编码掉。
  • 免费、即时、不上传数据。

使用方法

  1. 把文本或 URL 粘贴到输入框。
  2. 选择模式:编码查询参数值用"组件模式",编码整个 URL 用"完整URL模式"。
  3. 点"编码"或"解码"。
  4. 复制结果。

示例

输入

https://example.com/search?q=hello world & 你好

输出

组件模式:  https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world%20%26%20%E4%BD%A0%E5%A5%BD
完整URL模式: https://example.com/search?q=hello%20world%20&%20%E4%BD%A0%E5%A5%BD

组件模式连结构字符也编码;完整 URL 模式保留它们。

常见使用场景

  • 构建可分享的URL,其中搜索词或筛选值来自用户输入,可能包含空格、&或其他特殊字符。
  • 解码邮件或广告活动里的长追踪/跳转链接,点击前先看清实际目标地址和参数。
  • 排查为什么某个查询参数没被服务器正确读取——常见原因是本该编码却没编码的保留字符。
  • 把中文、日文等非英文内容处理成能放进URL查询字符串的值。

encodeURIComponent 和 encodeURI 的实际区别

这两个正好对应本工具的两种模式,也对应开发者熟悉的真实JavaScript函数:encodeURIComponent(组件模式)会编码除少数几个保留字符外的所有内容,适合放进URL的任何单个值——查询参数值、路径片段、hash片段都用这个。encodeURI(完整URL模式)不动URL的结构字符(:、/、?、#、&、=),因为它假设你编码的是一个已经有结构的完整URL,而不是单个原始值——如果拿它去编码单个参数值,会漏掉编码那个值里可能包含的&或=字符,这正是选错模式时最常见的错误。

保留字符和非保留字符

URL规范(RFC 3986)把字符分成两类:非保留字符(字母、数字、- _ . ~)永远安全、从不需要编码;保留字符(: / ? # [ ] @ ! $ & ' ( ) * + , ; =)在URL结构中有特殊含义,只有当它们作为字面数据出现而不是结构标点时才需要编码。这正是两种模式存在的原因——组件模式把保留字符当作需要保护的数据,完整URL模式把它们当作需要保留的结构。理解这个区别比死记"什么时候用哪个模式"更有用,因为它解释了为什么同一个字符(比如&)在不同URL里有时被编码、有时不被编码,取决于它在那个具体URL里扮演的角色。

常见问题

什么时候用组件模式,什么时候用完整URL模式?

编码单个查询参数值时用组件模式(encodeURIComponent),它会把 /、?、&、= 都编码,防止破坏 URL 结构;编码完整 URL 时用完整URL模式(encodeURI),它保留结构字符让 URL 仍然可用。

空格为什么变成 %20 而不是 +?

两者在不同场景下都有效。%20 是通用的百分号编码;+ 表示空格只在旧式 application/x-www-form-urlencoded 格式的查询字符串里成立。本工具用 %20,在任何地方都正确。

为什么解码时报错?

输入里有格式错误的百分号序列,比如 % 后面没有跟两个十六进制字符。常见原因是 URL 被截断或被重复解码。修复或删掉损坏的 % 序列即可。

什么是双重编码?

对已编码文本再编码一次:%20 会变成 %2520,因为 % 本身被编码成 %25。这是常见 bug——如果解码结果里仍有 % 编码,再解码一次即可。

中文和 emoji 能正确处理吗?

能。文本按 UTF-8 字节编码,"你好"变成 %E4%BD%A0%E5%A5%BD,解码后完整还原——和浏览器的行为完全一致。

相关工具