文字為什麼顯示“&”以及如何修複
發布於 · 更新於 閱讀約 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、雜湊與編碼地址,不要混淆。
檢查結果
- 只要工具提示還有實體,就繼續再運行一次解碼。
- 與螢幕上的原始文字對照。
- 檢查不間斷空格和表情符號。
