跳到正文

URL 编码解码

URL Encoder & Decoder

对 URL 和查询参数做百分号编解码,可选整条 URL 或单个组成部分两种模式。

对 URL 做百分号编码和解码,并把四套都叫「URL 编码」的不同规则分开:`encodeURIComponent`、`encodeURI`、严格的 RFC 3986,以及把空格变成 `+` 的表单编码。选错一套,得到的就是一条别人输入 `&` 之前都正常的链接。

🔒 完全在你的浏览器里运行urlencodedecodepercent
规则
方向
适用范围

一个查询值、一段路径、一个片段。`encodeURIComponent` 会转义 `/ ? : @ & = + $ , #`,而把 `A-Za-z0-9 - _ . ! ~ * ' ( )` 留着不动。

文本

编码后的值

输入

0个字符

输出

0个字符

转义掉的字符

0

怎么用

  1. 先选范围

    「组件」用于单个查询值或单个路径段——这是常见情况。「整条 URL」只用于你已经有一条 URL、只想整理一下的时候;它特意不动 `?`、`&` 和 `/`。

  2. 粘贴并读输出

    面板下方的计数器显示转义了多少个字符,这是发现自己选了一个什么都没做的范围的快捷办法。

  3. 解码老 URL 时设置字节编码

    十来年前中文网站的链接百分号编码的是 GBK 字节而不是 UTF-8,按 UTF-8 解码得到的就是乱码。解码模式下的选择器里有 GB18030、EUC-KR、Shift_JIS 和 Latin-1 系列。

  4. 参数多的时候按字段编辑查询串

    「按查询串编辑」开关把 URL 拆成名/值行。值以解码后的形式显示、以编码后的形式写回,所以嵌在 `next=` 参数里的一整条 URL 编辑之后仍然完好。

常见问题

「组件」和「整条 URL」有什么区别?

「组件」会转义分隔符——`/ ? : @ & = +`——因为一个含有它们的*值*不转义就会把 URL 撕开。「整条 URL」保留它们,因为它们就是结构。对一个值用「整条 URL」,是造出一条值里一出现 & 就失效的链接的标准做法。

为什么我的签名验不过?

多半是因为 `encodeURIComponent` 不动 `! ' ( ) *`,而 RFC 3986 会转义它们。OAuth 1.0、AWS SigV4 和大多数其他签名方案都按严格规则做规范化,所以含有撇号的值哈希出来就不一样。「严格」范围就是为这个准备的。

「编码了两次」的提示是什么意思?

意思是把结果再解码一次会得到不同的东西——本该是 `%20` 的地方出现了 `%2520`。通常是一个值在客户端过了一次编码器,又在代理或框架里过了一次。解码两次拿回原文,然后修管道。

为什么空格有时是 `+`、有时是 `%20`?

`+` 属于 `application/x-www-form-urlencoded`——表单 POST 的正文,以及 `URLSearchParams` 生成的东西。URL 里其他任何地方空格都是 `%20`,`+` 表示字面的加号。混用会把 `a+b` 变成 `a b`,或者反过来。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。