HTML編碼器

對 HTML 實體進行編碼和解碼

如何使用HTML編碼器

  1. 1貼上需要轉義的 HTML 文本(含 < > & 等字元)。
  2. 2選擇編碼(轉義特殊字元)或解碼(還原)。
  3. 3複製結果用於網頁程式碼、表單值或文件展示。

HTML 轉義是什麼?為什麼需要

常用對映:& → &amp; < → &lt; > → &gt; " → &quot; ' → &#39;

HTML 轉義把具有語法含義的字元換成實體引用,避免瀏覽器把它們誤當成標籤或屬性。例如把 < 寫成 &lt;,頁面才會原樣顯示小於號。

在把使用者輸入回顯到頁面時,正確轉義能防止 XSS(跨站指令碼)攻擊——這是 Web 安全的基本功。服務端框架多會自動轉義,手動拼接 HTML 時尤其要小心。

本工具雙向支援編碼/解碼,適合檢查一段文本在網頁裡到底會渲染成什麼,或還原別人轉義過的內容。

HTML 編碼的目的是**把字元變成「字面量」而非「標記」**。使用者輸入 `<script>` 若直接輸出到頁面,瀏覽器會當成標籤執行;編碼成 `&lt;script&gt;` 後,瀏覽器只顯示為文本。這就是防禦 XSS(跨站指令碼攻擊)的第一道防線。

**但只編碼 < > & 是不夠的**,要看輸出位置:① HTML 文本節點:編碼 < 和 &;② HTML 屬性值:必須編碼引號(否則可閉合屬性注入事件);③ JavaScript 程式碼塊:HTML 編碼無效,需做 JS 字串轉義(' \ \n 及 </script>);④ URL:需 URL 編碼。**最穩妥的做法是使用框架自帶的自動轉義**(React 的 {}、Vue 的 {{}} 預設轉義),只有明確需要輸出 HTML 時才用 dangerouslySetInnerHTML / v-html,且必須先做白名單過濾。

字元實體名實體編號何時必須編碼
<&lt;&#60;任何使用者輸入回顯
>&gt;&#62;任何使用者輸入回顯
&&amp;&#38;始終(包括已編碼串)
"&quot;&#34;屬性值用雙引號包裹時
'&#39;&#39;屬性值用單引號包裹時
空格&nbsp;&#160;需要保留連續空格
©&copy;&#169;可選(UTF-8 下可直寫)
¥&yen;&#165;可選

HTML 實體編碼對照

常見問題

轉義和加密是一回事嗎?

不是。轉義只是『讓字元失去語法含義』的文本處理,任何人都能解碼還原;它不保密,也不能替代加密。

什麼時候必須轉義?

凡是把資料插入 HTML、屬性、URL 或 JS 上下文時。最危險的是把使用者輸入直接拼進頁面,必須用對應上下文的轉義。

為什麼解碼後和原文本不一樣?

若原文本身含實體(如已轉義的 &amp;),解碼會還原成 &。這是預期行為;反覆編解碼要留意冪等性。

為什麼 & 要最先編碼?

因為編碼結果本身含有 &(如 &lt;)。如果先編碼 < 得到 &lt;,再編碼 & 就會變成 &amp;lt;,瀏覽器顯示為 &lt; 而非 <,出現「雙重編碼」的顯示錯誤。正確順序是先編 & 再編其他字元。同理,解碼時順序相反。這是手寫編碼器最常見的 bug。

UTF-8 頁面還需要實體編碼嗎?

對於顯示目的(如 © ¥ é 中文)不需要,直接寫字元即可,更簡潔也便於搜尋。但對於**安全目的**(< > & 引號)必須編碼,無論什麼編碼格式。簡單判斷:這些字元是否會被瀏覽器當作語法解析?會,就需要編碼。現代做法是在輸出層統一轉義,而不是在儲存層轉義——儲存原始資料,輸出時按上下文轉義,這樣資料可用於多種場景且不會累積編碼錯誤。

更多工具