使用方法
- 将文本或链接粘贴到文本或网址中。
- 在操作中选择编码或解码。
- 若为单个值,例如搜索词,请将范围保持为单个值;若为整个链接,则选择完整网址。
- 查看结果;若文本是带查询的链接,还可查看查询参数表。
百分号编码的作用
网址只能包含一小部分字符。其他每个字符都要写作一个 % 号加两位十六进制数字,对应其 UTF-8 形式中的每个字节。因此汉字“你”会变为 %E4%BD%A0,空格则变为 %20。规则见 RFC 3986 第2.1节。
你 → UTF-8 bytes E4 BD A0 → %E4%BD%A0
- 使用单个值编码时,只保留 A 至 Z、a 至 z、0至9,以及 - _ . ! ~ * ' ( ) 原样不变。
- 解码会把每个有效的 %XX 还原为其字节,再把字节还原为它们所构成的字符。
单个值还是完整网址
单个值也会转义分隔符(: / ? # & = 和 +),因此查询值不会破坏网址的结构。完整网址则保留这些分隔符,使链接保持其形态。解码完整网址时,代表分隔符的转义(例如 %2F)仍保持转义状态,因此链接的含义不变。
表单编码与 + 号
HTML 表单把空格写作 +,把加号写作 %2B。因此在表单写出的查询字符串中,+ 表示空格。选项表单编码读取并写出这一规则。关闭时,+ 保持为加号,与 RFC 3986 的规定一致。
解码拒绝什么
- 后面不是两位十六进制数字的 % 号,例如 %E0%A4%A 的末尾。
- 无法组成有效 UTF-8 的转义,例如单独的一个字节 %FF。
- 残缺的字符,例如表情符号的一半,无法编码。
计算示例:搜索链接
用单个值对 Ankara & İzmir? 进行编码,结果为 Ankara%20%26%20%C4%B0zmir%3F。空格、和号、大写字母 İ(UTF-8 中占两个字节)以及问号都被转义了。
用完整网址并勾选表单编码对 https://example.com/ara?q=%C3%A7ay+kahve&page=2进行解码,结果为 https://example.com/ara?q=çay kahve&page=2。该查询有两个参数:q 为 çay kahve,page 为2。
| 输入 | 结果 |
|---|---|
| Ankara & İzmir?(单个值,编码) | Ankara%20%26%20%C4%B0zmir%3F |
| https://example.com/ara?q=%C3%A7ay+kahve&page=2(解码) | https://example.com/ara?q=çay kahve&page=2 |
常见问题
encodeURI 与 encodeURIComponent 有什么区别?
encodeURIComponent 转义所有分隔符,因此适用于查询字符串中的单个值。encodeURI 保留使网址具有结构的字符,例如 : / ? # & 和 =,因此适用于整个链接。页面上的“单个值”对应前者,“完整网址”对应后者。
为什么空格在一处变为 %20,在另一处却变为 +?
%20是空格的标准转义,在网址的任何位置都有效。+ 只在表单编码中表示空格,即在 HTML 表单写出的查询字符串中。当链接来自表单时,请勾选“表单编码”。
为什么 %E0%A4%A 会被拒绝?
转义 %E0 开始一个三字节的字符,但文本在 %A 之后就结束了,转义并不完整。每个 % 号都需要两位十六进制数字,且每个字节都必须属于一个完整的 UTF-8 字符。
我的链接会被发送到服务器吗?
不会。编码和解码都由您的浏览器完成,因此携带令牌或私密数据的链接只留在您的设备上。
为什么解码后的参数中仍有加号?
关闭“表单编码”时,+ 保持为加号,这与 RFC 3986 的定义一致。许多网页表单把空格写作 +,因此请勾选该选项,以按表单的本意读取这些链接。
资料来源
- RFC 3986:Uniform Resource Identifier (URI): Generic Syntax,第2.1节(IETF,英文)
- ECMA-262:ECMAScript 规范中的 encodeURI、encodeURIComponent 与 decodeURI(英文)
- WHATWG URL Standard:application/x-www-form-urlencoded 解析(英文)
数据和文字最近核对于2026年11月10日星期二。