HTML編碼器
對 HTML 實體進行編碼和解碼
如何使用HTML編碼器
- 1貼上需要轉義的 HTML 文本(含 < > & 等字元)。
- 2選擇編碼(轉義特殊字元)或解碼(還原)。
- 3複製結果用於網頁程式碼、表單值或文件展示。
HTML 轉義是什麼?為什麼需要
常用對映:& → & < → < > → > " → " ' → 'HTML 轉義把具有語法含義的字元換成實體引用,避免瀏覽器把它們誤當成標籤或屬性。例如把 < 寫成 <,頁面才會原樣顯示小於號。
在把使用者輸入回顯到頁面時,正確轉義能防止 XSS(跨站指令碼)攻擊——這是 Web 安全的基本功。服務端框架多會自動轉義,手動拼接 HTML 時尤其要小心。
本工具雙向支援編碼/解碼,適合檢查一段文本在網頁裡到底會渲染成什麼,或還原別人轉義過的內容。
HTML 編碼的目的是**把字元變成「字面量」而非「標記」**。使用者輸入 `<script>` 若直接輸出到頁面,瀏覽器會當成標籤執行;編碼成 `<script>` 後,瀏覽器只顯示為文本。這就是防禦 XSS(跨站指令碼攻擊)的第一道防線。
**但只編碼 < > & 是不夠的**,要看輸出位置:① HTML 文本節點:編碼 < 和 &;② HTML 屬性值:必須編碼引號(否則可閉合屬性注入事件);③ JavaScript 程式碼塊:HTML 編碼無效,需做 JS 字串轉義(' \ \n 及 </script>);④ URL:需 URL 編碼。**最穩妥的做法是使用框架自帶的自動轉義**(React 的 {}、Vue 的 {{}} 預設轉義),只有明確需要輸出 HTML 時才用 dangerouslySetInnerHTML / v-html,且必須先做白名單過濾。
| 字元 | 實體名 | 實體編號 | 何時必須編碼 |
|---|---|---|---|
| < | < | < | 任何使用者輸入回顯 |
| > | > | > | 任何使用者輸入回顯 |
| & | & | & | 始終(包括已編碼串) |
| " | " | " | 屬性值用雙引號包裹時 |
| ' | ' | ' | 屬性值用單引號包裹時 |
| 空格 | |   | 需要保留連續空格 |
| © | © | © | 可選(UTF-8 下可直寫) |
| ¥ | ¥ | ¥ | 可選 |
HTML 實體編碼對照
常見問題
轉義和加密是一回事嗎?
不是。轉義只是『讓字元失去語法含義』的文本處理,任何人都能解碼還原;它不保密,也不能替代加密。
什麼時候必須轉義?
凡是把資料插入 HTML、屬性、URL 或 JS 上下文時。最危險的是把使用者輸入直接拼進頁面,必須用對應上下文的轉義。
為什麼解碼後和原文本不一樣?
若原文本身含實體(如已轉義的 &),解碼會還原成 &。這是預期行為;反覆編解碼要留意冪等性。
為什麼 & 要最先編碼?
因為編碼結果本身含有 &(如 <)。如果先編碼 < 得到 <,再編碼 & 就會變成 &lt;,瀏覽器顯示為 < 而非 <,出現「雙重編碼」的顯示錯誤。正確順序是先編 & 再編其他字元。同理,解碼時順序相反。這是手寫編碼器最常見的 bug。
UTF-8 頁面還需要實體編碼嗎?
對於顯示目的(如 © ¥ é 中文)不需要,直接寫字元即可,更簡潔也便於搜尋。但對於**安全目的**(< > & 引號)必須編碼,無論什麼編碼格式。簡單判斷:這些字元是否會被瀏覽器當作語法解析?會,就需要編碼。現代做法是在輸出層統一轉義,而不是在儲存層轉義——儲存原始資料,輸出時按上下文轉義,這樣資料可用於多種場景且不會累積編碼錯誤。
