URL 编码/解码
URL 编码,是把网址里不能直接出现的字符按 UTF-8 逐字节写成 %xx 形式,比如「中」变成 %E4%B8%AD,解码则是把 %xx 还原成文本。粘贴网址或字符串即可在浏览器本地互转:参数值选 component(连 : / ? & 也转义),整条网址选 uri(保留 :// 与 ?&),空格可按 + 输出。一个汉字固定占 9 个字符,中文与 emoji 往返不乱码。内容不上传,免费不注册。
🔒 编解码在你的浏览器内完成,内容不上传任何服务器。
如何使用URL 编码/解码
选模式:「编码(文本 → %xx)」把网址或字符串转成百分号编码,「解码(%xx → 文本)」把 %xx 还原成可读文本;切换模式会清空上一次结果。
把内容粘进输入框,再选编码范围:只转某个参数的值用 component(: / ? & = 也一并转义),转整条网址用 uri(保留 :// 和 ?&#)。component 下还会多出「空格按 + 处理」,勾上就按表单 application/x-www-form-urlencoded 的写法输出 +,不勾用标准的 %20。
点「编码」或「解码」出结果,结果条会显示字符数,点「复制」拿走。拿不准转对没有,点「⇄ 用结果反向验证」把结果回填成输入并切换模式,再跑一次看能不能原样还原。
关于URL 编码/解码的常见问题
- URL 编码解码会不会上传我的网址内容
- 不会。编码和解码都由浏览器里的 JavaScript 在你的设备上完成,输入框里的网址、参数、token 都不会发往服务器,也不写入本地存储,关掉或刷新页面即清除。想自己确认:按 F12 打开开发者工具的「网络」面板,再点一次「编码」,整个过程不会产生任何请求。所以带内网地址、带签名参数的链接也可以直接粘进来处理。
- 网址里的中文怎么转成 %xx 编码
- 把含中文的网址或关键词粘进输入框,选「编码(文本 → %xx)」再点按钮即可。中文按 UTF-8 逐字节转成百分号序列:一个常见汉字占 3 个字节、编出 9 个字符,「小鹿」就是 %E5%B0%8F%E9%B9%BF,「中」是 %E4%B8%AD。只想编码 q= 后面的搜索词,用 component 范围;要把一整条含中文路径的网址转成能贴进代码或聊天窗的形式,用 uri 范围,它会保留 :// 和 ?& 不动。
- URL 编码 component 和 uri 怎么选
- 按你编的是「参数值」还是「一整条网址」来选。component 对应 encodeURIComponent,把 : / ? # & = 这些分隔符也转义,适合编码单个参数的值;uri 对应 encodeURI,保留这些分隔符,适合处理整条网址。举个例子:https://example.com/a?b=1&c=2 用 component 会变成 https%3A%2F%2Fexample.com%2Fa%3Fb%3D1%26c%3D2,整条链接不再可点;用 uri 则原样保留结构,只转中文和空格。反过来,参数值里如果含 & 或 = 却用了 uri,链接结构会被拆错,参数从那里就断了。
- URL 编码里的加号 + 是空格吗
- 看它出现在哪里。在 application/x-www-form-urlencoded(表单提交和查询串)里 + 表示空格,标准 URL 路径里 + 就是加号本身。所以本工具把它做成 component 范围下的可选项:勾上「空格按 + 处理」,编码时空格写成 +、解码时 + 还原成空格;不勾就用通用的 %20。这里有个坑——如果原文里的加号是真加号(比如 C++、1+1),勾着解码会把它错当成空格,这时取消勾选再解一次即可;真正的加号编码后是 %2B,不受影响。
- URL 解码提示 %xx 序列错误怎么解决
- 这个提示说明输入里存在不完整或非法的百分号序列,常见三种:写错的 %zz、孤零零的一个 %、以及从聊天记录或日志里复制时被截断的半个汉字(如只剩 %E4%B8,少了最后一段)。先回原处重新完整复制一遍;如果内容本来就是普通文本、只是恰好含 %(比如「涨幅 20%」),那它不需要解码,直接用即可。另外,老站点用 GBK 编码的网址(形如 %D6%D0)在这里也会报同样的错——浏览器原生解码只认 UTF-8,遇到不合法的字节组合就会拒绝,这类链接需要用支持 GBK 的工具处理。
- URL 解码后 %26 %3F 为什么没还原
- 因为用的是 uri 范围。uri 对应 decodeURI,它按设计不还原 & ? # / : = 这些保留字符——如果还原了,%26 会变成真的 &,整条网址的参数结构就被改写了。要把参数值里的 %26 还原成 &、%3F 还原成 ?,把「编码范围」改成 component 再解一次即可。判断方法很简单:解出来的结果里还剩 %26、%3F、%23 这类序列,多半就是范围选错了,切成 component 重解一遍。
- URL 编码后中文变成 %25E4 开头怎么办
- 这是双重编码:内容已经是 %xx 形式,又被编了一次,% 本身被转成了 %25,于是 %E4%B8%AD 变成 %25E4%25B8%25AD。解法是切到解码模式多解一次——第一次解出 %E4%B8%AD,第二次才还原成「中」。要避免它,编码前先看一眼输入里有没有现成的 %xx;处理完用「⇄ 用结果反向验证」跑一轮,能一次还原成原文就说明层数是对的。后端和前端各编码一次是最常见的成因,链接里出现 %2520(%20 被再编一次)也是同一回事。
- URL 编码后网址会变长多少字符
- 按 UTF-8 字节数算:每个需要转义的字节变成 3 个字符(%加两位十六进制),常见汉字 3 字节编成 9 个字符,emoji 4 字节编成 12 个字符(😀 是 %F0%9F%98%80),空格是 %20(3 个字符,勾了「空格按 +」则只占 1 个)。举个实算:「小鹿tools 免费」10 个字符,编码后是 44 个字符——两个汉字 18、tools 原样 5、空格 3、两个汉字 18。所以中文关键词多的网址容易膨胀,而不少服务器和浏览器把 URL 长度限制在 2000 字符量级,做长链接、二维码或短信推送前值得先在结果条上看一眼字符数。
- 手机上能用 URL 编码解码工具吗
- 可以。用手机浏览器(iOS Safari、安卓 Chrome、微信内置浏览器都行)打开本页,长按粘贴网址、选好编码范围、点按钮就能得到结果,处理同样在手机本地完成,不用装 App。结果区点「复制」即可直接粘到微信、备忘录或浏览器地址栏。从微信里复制的链接常带 ?from=… 之类的跟踪参数,粘进来解码就能看清整条网址到底指向哪儿。
URL 编码对照表:中文、空格、& 各转成什么
一句话看懂两种范围的差别:component 把分隔符也转义,uri 把它们留着。下表是常见字符在两种范围下的实际结果,可以直接粘进工具对一对。
| 字符 | component 范围 | uri 范围 | 说明 |
|---|---|---|---|
| 中(一个汉字) | %E4%B8%AD | %E4%B8%AD | UTF-8 下 3 个字节,编成 9 个字符 |
| 😀(emoji) | %F0%9F%98%80 | %F0%9F%98%80 | 4 个字节,编成 12 个字符 |
| 空格 | %20(勾选后为 +) | %20 | 表单查询串里习惯写成 + |
| & | %26 | & 原样保留 | 参数值里不转义会被当成参数分隔符,链接从这里断 |
| ? | %3F | ? 原样保留 | 不转义会被当成查询串的开始 |
| / | %2F | / 原样保留 | 整条网址要保路径结构就用 uri |
| # | %23 | # 原样保留 | 不转义会被当成锚点,后面的内容不发给服务器 |
| % | %25 | %25 | 已编码内容再编一次,就是双重编码的来源 |
| - _ . ! ~ * ' ( ) | 原样保留 | 原样保留 | 这 9 个字符两种范围都不转义 |
URL 编码解码出错的常见情况怎么排查
URL 解码出问题分两类:一类直接报「不是有效的 URL 编码(%xx 序列错误)」,一类不报错但结果不对——后者更难发现,因为半成品看着也像正常编码。对着下表按现象找原因。
| 现象 | 原因 | 怎么改 |
|---|---|---|
| 提示「不是有效的 URL 编码(%xx 序列错误)」 | 有 %zz、单独的 %,或复制时截断了半个汉字(只剩 %E4%B8) | 回原处重新完整复制;内容若本就是含 % 的普通文本,不需要解码 |
| 解出来一串报错,链接来自很老的站点 | 网址按 GBK 编码(形如 %D6%D0),浏览器原生解码只认 UTF-8 | 这类链接需用支持 GBK 的工具处理,本工具按 UTF-8 解 |
| 解码后 %26、%3F、%23 还留着 | 用了 uri 范围,decodeURI 按设计不还原保留字符 | 把编码范围改成 component 再解一次 |
| 解出来还是 %E4%B8%AD 这种半成品 | 原串是双重编码,% 被编成了 %25 | 再解一次;用「⇄ 用结果反向验证」确认能一次还原成原文 |
| 加号莫名其妙变成了空格 | 勾了「空格按 +」,但原文里的 + 是真加号(如 C++) | 取消勾选再解一次;真加号编码后是 %2B,不会被误判 |
| 编码后链接不能点了 | 整条网址用了 component,:// 和 ?& 全被转义 | 改用 uri 范围;只有单个参数值才用 component |
相关工具:网址参数里那种 eyJhbGciOi… 的长串多半是 Base64 编码/解码,其中 JWT 可以用 JWT 解码器直接看清载荷;把两条编码前后的网址放一起比对差异,用 文本对比更快;手头是一整段文字或一页网页源码、要先把里面的网址一条条捞出来再逐条编解码,用 提取链接,它还能顺手去掉 utm 这类跟踪参数。嫌中文路径编码后一个汉字要占 9 个字符、网址太长,可以用 URL Slug 生成器把中文标题转成拼音网址后缀,从源头避开百分号编码。中文或空格没编码,请求发出去往往换来一个 404 或 400, 想确认这个状态码到底是什么意思、该查调用方还是服务端,用 HTTP 状态码查询。