全部指南

文字为什么显示“&”以及如何修复

发布于 · 更新于 阅读约 1 分钟

当文字显示“&”而不是“&”时,说明某个 HTML 实体被多编码了一次。工具一次解码一级,并在还剩一级时提醒您。

什么是 HTML 实体

实体是一串符号,用来表示页面代码中保留的字符。常见的有五个。

字符实体
&&
<&lt;
>&gt;
"&quot;
'(直撇号)&#039;

重复编码从哪里来

文字有时会经过两个系统,每个都会编码:先是编辑器,然后是页面模板。每经过一次,都会转换前一个实体里的“&”。使用 编码和解码 HTML 实体,对“Tom & Jerry”编码得到“Tom &amp; Jerry”,再对这个结果编码,就得到“Tom &amp;amp; Jerry”。

步骤得到的文字
原始文字Tom & Jerry
编码一次Tom &amp; Jerry
编码两次Tom &amp;amp; Jerry

浏览器在显示时会解码一级。因此,编码了两次的文字,显示出来是“&amp;”而不是“&”。

一次解码一级

工具每次只去掉一级实体。如果结果里仍有实体,“两者”模式会提示,您再对结果运行一次解码即可。

文字第一次解码第二次解码
Tom &amp;amp; JerryTom &amp; JerryTom & Jerry
&amp;lt;b&amp;gt;gras&amp;lt;/b&amp;gt;&lt;b&gt;gras&lt;/b&gt;<b>gras</b>

一次只解码一级,可以避免撤销有意的编码:一个需要在屏幕上显示“&amp;”的代码示例,在页面里写成“&amp;amp;”。

重音与符号

解码能识别所有以分号结尾的命名实体,不只是常用的那五个。“caf&eacute; &agrave; 5&nbsp;&euro; &copy; 2026”得到“café à 5 € © 2026”,不间断空格也变成真正的不间断空格。

数字实体

数字实体同样会被解码:“&#233;t&#xE9;”得到“été”,“&#x1F600;”和“&#128512;”得到同一个表情符号。

工具保持原样的内容

  • 像“&inconnue;”这样的未知实体保持原样。
  • 句子里没有结尾分号的实体,比如“&amp”或“&lt”,不会被改动。
  • 带参数的地址,比如“https://exemple.fr/?a=1&param=2&copy=4”,保持准确:其中的“&param”和“&copy”不会被当成实体。

编码代码以便显示

要在页面里显示一段代码,只需编码一次。文字“<a href="x">l’été & plus</a>”得到“&lt;a href=&quot;x&quot;&gt;l&#039;été &amp; plus&lt;/a&gt;”。带重音的字母不会被编码,只有那五个保留字符会被编码。

避免这个问题

只编码一次,并且在最后一刻、写入页面时再编码。要批量替换错误编码留下的残余,可以用 查找并替换。网址采用另一种编码,见 Base64、哈希与编码地址,不要混淆。

检查结果

  1. 只要工具提示还有实体,就继续再运行一次解码。
  2. 与屏幕上的原始文字对照。
  3. 检查不间断空格和表情符号。

编码和解码 HTML 实体