跳到正文
马克工具箱

URL 编码解码

把文本编码后放进网址,把 %E4%B8%AD 这类转义字符串还原成可读文本,并把任意网址拆解成各个部分和查询参数。支持单个参数、完整网址、HTML 表单三种编码方式。

在浏览器本地运行,输入的内容和文件都不会上传

使用步骤

  1. 选择「编码」或「解码」。
  2. 选择模式:单个参数值用「参数值」,保留网址结构用「完整网址」,HTML 表单数据用「表单」(空格转为 +)。
  3. 粘贴文本,结果实时更新。
  4. 如果输入的是网址,下方会列出协议、主机、路径和各个查询参数。

参数说明

参数值
除字母、数字和 - _ . ~ 外全部编码,用于查询参数的值或路径片段。等同于 encodeURIComponent,并额外编码 RFC 3986 保留的 ! ' ( ) *。
完整网址
保留构成网址结构的字符(: / ? # & =),只编码空格和非 ASCII 字符。等同于 JavaScript 的 encodeURI。
表单
application/x-www-form-urlencoded 格式,HTML 表单提交时使用。空格编码为 + 而不是 %20;解码时 + 还原为空格。

示例

输入 参数值 完整网址 表单
a b&c a%20b%26c a%20b&c a+b%26c
中文 %E4%B8%AD%E6%96%87 %E4%B8%AD%E6%96%87 %E4%B8%AD%E6%96%87
https://x.com/?q=1 2 https%3A%2F%2Fx.com%2F%3Fq%3D1%202 https://x.com/?q=1%202 https%3A%2F%2Fx.com%2F%3Fq%3D1+2

拼接带参数的网址

把用户输入放进查询字符串时,要对每个值单独编码:

const url = `https://example.com/search?q=${encodeURIComponent(query)}&page=2`;

如果最后才对整个网址编码,值里面的 & 和 = 不会被编码,参数就会被拆错。

常见问题

%20 和 + 有什么区别?

两者都可以表示空格,但适用位置不同。%20 在网址任何位置都有效;+ 只在表单提交的查询字符串里表示空格,在路径中就是加号本身。

为什么出现 %2520 这种重复编码?

内容被编码了两次,%20 里的 % 又被编码成了 %25。解码两次即可还原;代码里要确保只有一处对参数做编码。

encodeURI 和 encodeURIComponent 该用哪个?

往网址里拼接每个参数值时用 encodeURIComponent(「参数值」模式);只有对一个可能含空格或中文的完整网址编码时才用 encodeURI(「完整网址」模式)。

提示「百分号编码不完整或不正确」是什么意思?

某个 % 后面不是两位十六进制数字,或者解出的字节不是合法的 UTF-8。提示中会给出第一个出错的位置。

中文在网址里是怎么编码的?

每个汉字先转成 UTF-8 字节,每个字节写成 %XX,所以「中」会变成 %E4%B8%AD。GBK 编码的老网站会得到不同的结果。

隐私说明

本工具完全在浏览器中运行,文件和文本都在你的设备上处理,不会上传到我们的服务器。

相关工具