跳到主内容
UniKit

URL 编码解码

按 encodeURIComponent、encodeURI、表单编码(+ 表示空格)或严格百分号模式编码解码 URL,支持多次编解码、逐字符对照表与非法百分号序列提示。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

结果

逐字符对照

按当前模式逐个码点展示编码结果,方便找出被转义的字符

请输入内容后查看

这个工具能做什么

  • 把带中文、空格、& 或 # 的字符串放进 URL 查询串:拼接口、写请求参数前先编码,避免服务端收到半截参数。
  • 解开接口日志或浏览器地址栏里的 %E4%BD%A0%E5%A5%BD,看请求到底传了什么。
  • 排查双重编码问题:连续解码 2 次,看是不是某个中间层把 % 又编了一次,导致参数对不上。
  • 用逐字符对照表确认哪些字符被转义了:例如 #、& 在 URI 模式下保留,在组件模式下会被写成 %23、%26。

示例

输入

https://unikit.cc/tools?q=hello world&n=1

输出

https%3A%2F%2Funikit.cc%2Ftools%3Fq%3Dhello%20world%26n%3D1

示例用的是 encodeURIComponent(组件模式),所以 : / ? = & 全部被转义,空格写成 %20。如果选 encodeURI(URI 模式),结果会是 https://unikit.cc/tools?q=hello%20world&n=1,只有空格和中文被编码。

常见问题

四种模式到底该选哪个?

编码一个参数值用「组件」(encodeURIComponent);整条 URL 只补中文和空格用「URI」(encodeURI,保留 : / ? & = #);要提交表单或拼 application/x-www-form-urlencoded 用「表单」,它把空格写成 +;想最严格、只留下 A-Za-z0-9-_.~ 就用「百分号模式」,它连 !'()* 也一并转义。

为什么表单模式里空格变成了 + 而不是 %20?

这是 HTML 表单提交的历史约定:application/x-www-form-urlencoded 里 + 代表空格。解码时工具会把 + 还原成空格,但如果你把带 + 的字符串放进普通 URL 路径里,+ 就是字面意义的加号,别混用。

中文编码后为什么变长了这么多?

一个汉字在 UTF-8 里占 3 个字节,每个字节要写成 %XX 三个字符,所以编码后长度大约是原来的 9 倍。反过来,如果你看到的是 %C4%E3 这种 2 字节序列,说明原文是 GBK 编码,需要用字符集转换工具先转成 UTF-8。

提示「非法百分号序列」或「非法 UTF-8」是什么意思?

前者表示字符串里有孤立的 % 或 %X(后面不是两位十六进制),通常是复制时被截断或没编码就拼进了 URL;后者表示 %XX 序列本身合法,但拼起来的字节不是合法 UTF-8,常见于把 GBK 内容按 UTF-8 解码。

多次编解码有什么用?

用来对付双重编码。同一个字符串被编码两次后 % 会变成 %25,解码一次只能还原一层;把「次数」调到 2 就能一次看到最终结果,最多支持连续 5 次。整个过程都在浏览器里完成,输入不会上传。

关键词:url encodeurl decodeurl 编码url 解码encodeURIComponentencodeURIpercent encoding百分号编码表单编码form urlencoded中文乱码

同类工具