返回开发工具

URL 编码器 · 解码器 · Punycode IDN · 查询串解析

浏览器端运行的 URL 编码 / 解码工具:支持 encodeURI 与 encodeURIComponent 切换、递归解码、RFC 3492 Punycode(IDN xn-- 域名)、可视化查询串编辑。完全本地,零追踪。

纯浏览器运行。零上传。URL 不会离开本标签页。

递归解码(最多 16 轮)
原文0 chars · 0 bytes
编码后0 chars

encodeURI 与 encodeURIComponent —— 选对那一个

encodeURI 会保留 : / ? # & = + 等 reserved 字符,适合处理完整 URL。encodeURIComponent 会编码除 A-Z a-z 0-9 - _ . ~ ! * ' ( ) 之外的所有字符,只在编码单个 query value 或 path 段时才正确。RFC 3986 unreserved 是最严格的策略,只保留 A-Z a-z 0-9 - _ . ~,适合需要跨任何解析器都能稳定 round-trip 的场景。

Punycode 与 IDN (xn--)

域名在网络层只能是 ASCII。浏览器和解析器会把 münchen.de 这样的 Unicode 主机名按 RFC 3492 Bootstring 算法转成 xn--mnchen-3ya.de 这种 ACE 形式。本工具自实现 RFC 3492 —— 不依赖第三方 Punycode 库 —— 并按 label 处理,因此 example.中国 会变成 example.xn--fiqs8s。

+ 与 %20 的差异

URL 规范用 %20 表示空格;application/x-www-form-urlencoded 用 +。两者并不通用:如果把 + 形式直接喂给 URL 解析器,+ 会保持字面意义。本工具的 form mode 开关会同时处理两个方向,并把字面 + 正确转成 %2B,保证 round-trip。

为多层重定向准备的递归解码

广告追踪、OAuth 跳转链常常对 URL 多次编码:字面空格 → %20 → %2520 → %252520。打开递归解码可以剥到 16 层为止;脚注会显示实际使用的轮数。如果计数停在 16 且仍有剩余 percent 序列,说明输入异常或存在解码环。

常见问题

encodeURI 和 encodeURIComponent 有什么区别?
encodeURI 会保留 : / ? # & = + 等 URL reserved 字符,适合处理整个 URL。encodeURIComponent 会编码这些字符,适合处理 query value 或 path 段。如果用 encodeURIComponent 包裹完整 URL,会得到以 https%3A%2F%2F 开头的字符串 —— 通常是 bug。
为什么我的 URL 里出现了 xn--?
域名在网络层是 ASCII-only。当主机名含非 ASCII 字符(Unicode、中日韩、带重音的拉丁字母)时,它会通过 Punycode 转成 ACE 形式并加 xn-- 前缀。xn--mnchen-3ya 是 München;xn--fiqs8s 是 中国。
什么时候用 + 而不是 %20 表示空格?
仅当目标按 application/x-www-form-urlencoded 解析时(例如经典 HTML 表单 POST 的 body、jQuery $.param() 输出)才用 +。URL 路径和大多数 query string 都应该用 %20。混用会悄无声息地损坏值。
我的数据会被上传吗?
不会。所有编码、解码、Punycode、解析都通过浏览器内的 JavaScript 完成,输入不会触发任何网络请求。

相关工具