Base64 / URL / HTML 编码速查表

空格、&、? 等符号与常用汉字的 URL 编码、HTML 实体、Base64 值对照,做网页、写接口、排查乱码直接查。

这张表把常用字符在三种编码下的值并排列出来,四列分别是:字符本身、URL 编码(百分号编码)、HTML 实体、Base64。做网页、写接口、排查乱码,或者只是想知道某个符号编码后长什么样,都可以直接来这张表里查。第一列里的空格和中文,是为了让你看到多字节字符的编码结果,实际使用时按字符查对应那一行即可。

URL 编码:中文和符号为什么都要转义

网址只允许一部分字符原样出现,中文、空格,以及 & ? = # 这些有特殊含义的符号,都要写成 %XX 的形式。规则是按字节来:一个 UTF-8 汉字占 3 个字节,就编成 3 组 %XX,「中」写成 %E4%B8%AD 就是这个道理。表里从空格到中文一列,正好能看清 ASCII 字符是 1 组 %XX、汉字是 3 组的差别。

空格到底是 %20 还是加号

这是最容易混淆的一处。表里空格对应的是 %20,它在网址路径里通用;而在表单提交(application/x-www-form-urlencoded)的语境里,空格会写成加号。所以看到加号时先判断场合:普通网址里它是字面加号,表单数据里它才代表空格。拿不准就用 %20,兼容性最好。

HTML 实体:& 和 < 为什么必须转义

HTML 里有两个符号是保留的:& 是实体的引导符,< 是标签的开始,直接写在正文里会被浏览器误解,所以必须转义成 &amp; 和 &lt;。表里能看到,多数符号其实无需转义,真正必须处理的就那么几个:&、<、>,以及写在属性里的引号。实体有两种写法,像 &amp; 这样有名字的叫命名实体,&#39; 这样用数字的叫数字实体,效果一样。

Base64:把二进制搬进文本,但它不是加密

Base64 列给出的是单个字符编码后的结果,一个 ASCII 字符会变成 2 个字符再加两个等号填充。它常被用来把图片、文件塞进 JSON 或网页里。要提醒的是,Base64 不是加密,任何人都能解码还原;它的价值在于把不能直接放进文本的数据变成可打印字符,而不是保密。

同一个字符,三列的值怎么对起来

拿 & 举例:URL 编码是 %26,HTML 实体是 &amp;,Base64 是 Jg==。三者长度和形态都不一样,是因为它们服务于不同环节——URL 编码让字符能安全出现在网址里,HTML 实体让字符能安全出现在网页里,Base64 则把字节换成可打印字符。查表时先想清楚你要放进哪里,再去对应那一列取值,就不会取错。

中文为什么在每一列都变长

中文在 URL 编码和 Base64 里都比英文长,原因相同:它们在 UTF-8 里占 3 个字节,而 ASCII 字符只占 1 个字节。所以「中」的 URL 编码是 3 组 %XX,Base64 是 4 个字符;一个英文字母则只占 1 组 %XX、Base64 也只有 2 个字符加填充。HTML 实体这一列,中文通常写成数字实体(如 &#20013;),位数也比字母多。理解了字节数,长度的差异就都能解释。

查表之外:这些场景最容易用错

三种编码各有各的边界。URL 编码别拿加号去拼普通网址,也别把整条网址用 encodeURIComponent 全编一遍,那会把结构符号也破坏掉。HTML 实体只用在网页里,别把它写进 JSON 或数据库字段。Base64 只负责搬运,不要指望它保密。记住这三条,能避开大部分因为编码用错导致的乱码和报错。

常用字符的 URL / HTML / Base64 编码对照

字符URL 编码HTML 实体Base64
(空格)%20&#32;IA==
!%21无需转义IQ==
"%22&quot;Ig==
#%23无需转义Iw==
$%24无需转义JA==
%%25无需转义JQ==
&%26&amp;Jg==
'%27&#39;Jw==
(%28无需转义KA==
)%29无需转义KQ==
*%2A无需转义Kg==
+%2B无需转义Kw==
,%2C无需转义LA==
-%2D无需转义LQ==
.%2E无需转义Lg==
/%2F无需转义Lw==
:%3A无需转义Og==
;%3B无需转义Ow==
=%3D无需转义PQ==
?%3F无需转义Pw==
@%40无需转义QA==
[%5B无需转义Ww==
]%5D无需转义XQ==
<%3C&lt;PA==
>%3E&gt;Pg==
0%30无需转义MA==
1%31无需转义MQ==
9%39无需转义OQ==
A%41无需转义QQ==
Z%5A无需转义Wg==
a%61无需转义YQ==
z%7A无需转义eg==
中%E4%B8%AD&#20013;5Lit
文%E6%96%87&#25991;5paH
你%E4%BD%A0&#20320;5L2g
好%E5%A5%BD&#22909;5aW9

参考资料

常见问题

URL 编码、HTML 实体、Base64 该用哪个?

看数据要放进哪里:放进网址用 URL 编码,放进网页正文或属性用 HTML 实体,要嵌进 JSON、代码或文本里搬运二进制用 Base64。三者不是互相替代的关系。

空格在表里是 %20,为什么有时又看到加号?

%20 是网址里的通用写法;加号表示空格只出现在表单提交(application/x-www-form-urlencoded)的语境里。在网址路径、查询参数里统一用 %20,兼容性最好。

一个汉字为什么编码后有好几组 %XX?
因为 URL 编码按字节进行,一个汉字在 UTF-8 里占 3 个字节,所以编成 3 组 %XX,例如「中」是 %E4%B8%AD。英文只占 1 个字节,所以是 1 组。
HTML 实体里 &#39; 和 &apos; 一样吗?
都表示单引号,但 &#39; 是数字实体,兼容性更好;&apos; 是命名实体,在部分老版本浏览器里不认。写网页时用 &#39; 更保险。
Base64 编码后为什么末尾有等号?
等号是填充字符,用来把结果补齐到 4 的倍数。原文长度不是 3 的整数倍时就会出现,解码时可以省略,工具会自动补回。

需要处理自己的内容?用 Base64 编码解码 即可。 · 最后更新:2026-10-08

本表内容与数据的整理依据见 数据来源与核对流程,核对流程见 内容产生与纠错机制。