文字为什么显示“&”以及如何修复
发布于 · 更新于 阅读约 1 分钟
当文字显示“&”而不是“&”时,说明某个 HTML 实体被多编码了一次。工具一次解码一级,并在还剩一级时提醒您。
什么是 HTML 实体
实体是一串符号,用来表示页面代码中保留的字符。常见的有五个。
| 字符 | 实体 |
|---|---|
| & | & |
| < | < |
| > | > |
| " | " |
| '(直撇号) | ' |
重复编码从哪里来
文字有时会经过两个系统,每个都会编码:先是编辑器,然后是页面模板。每经过一次,都会转换前一个实体里的“&”。使用 编码和解码 HTML 实体,对“Tom & Jerry”编码得到“Tom & Jerry”,再对这个结果编码,就得到“Tom &amp; Jerry”。
| 步骤 | 得到的文字 |
|---|---|
| 原始文字 | Tom & Jerry |
| 编码一次 | Tom & Jerry |
| 编码两次 | Tom &amp; Jerry |
浏览器在显示时会解码一级。因此,编码了两次的文字,显示出来是“&”而不是“&”。
一次解码一级
工具每次只去掉一级实体。如果结果里仍有实体,“两者”模式会提示,您再对结果运行一次解码即可。
| 文字 | 第一次解码 | 第二次解码 |
|---|---|---|
| Tom &amp; Jerry | Tom & Jerry | Tom & Jerry |
| &lt;b&gt;gras&lt;/b&gt; | <b>gras</b> | <b>gras</b> |
一次只解码一级,可以避免撤销有意的编码:一个需要在屏幕上显示“&”的代码示例,在页面里写成“&amp;”。
重音与符号
解码能识别所有以分号结尾的命名实体,不只是常用的那五个。“café à 5 € © 2026”得到“café à 5 € © 2026”,不间断空格也变成真正的不间断空格。
数字实体
数字实体同样会被解码:“été”得到“été”,“😀”和“😀”得到同一个表情符号。
工具保持原样的内容
- 像“&inconnue;”这样的未知实体保持原样。
- 句子里没有结尾分号的实体,比如“&”或“<”,不会被改动。
- 带参数的地址,比如“https://exemple.fr/?a=1¶m=2©=4”,保持准确:其中的“¶m”和“©”不会被当成实体。
编码代码以便显示
要在页面里显示一段代码,只需编码一次。文字“<a href="x">l’été & plus</a>”得到“<a href="x">l'été & plus</a>”。带重音的字母不会被编码,只有那五个保留字符会被编码。
避免这个问题
只编码一次,并且在最后一刻、写入页面时再编码。要批量替换错误编码留下的残余,可以用 查找并替换。网址采用另一种编码,见 Base64、哈希与编码地址,不要混淆。
检查结果
- 只要工具提示还有实体,就继续再运行一次解码。
- 与屏幕上的原始文字对照。
- 检查不间断空格和表情符号。
