HTML 轉義/反轉義
將 &、<、>、"、' 等特殊字元轉換為 HTML 實體(轉義),或將實體還原為原始字元(反轉義)。適用於防範 XSS 攻擊及在 HTML 中嵌入文本。
常用命名 HTML 實體一覽
| 字元 | 命名實體 | 數字字元引用 | 說明 |
|---|---|---|---|
| & | & | & | 和號(表示"and"的符號) |
| < | < | < | 小於號(與 HTML 標籤的起始字元相同) |
| > | > | > | 大於號(與 HTML 標籤的結束字元相同) |
| " | " | " | 雙引號(屬性值的分隔符) |
| ' | ' | ' | 單引號(屬性值的分隔符) |
| |   | 不換行空格(不會觸發換行的空白字元) | |
| © | © | © | 版權符號 |
| ® | ® | ® | 註冊商標符號 |
| ™ | ™ | ™ | 商標符號 |
| € | € | € | 歐元符號 |
| ¥ | ¥ | ¥ | 日元符號 |
| ¢ | ¢ | ¢ | 美分符號 |
使用技巧
- HTML 轉義是防範 XSS(跨站指令碼攻擊)的基礎手段。在將使用者輸入嵌入 HTML 之前,務必先進行轉義處理。
&必須最先轉義。如果先轉換其他字元,新生成的&中的&會被再次轉義,造成重複轉義。- 在屬性值中嵌入字串時,除了
"(雙引號)外,最好連'(單引號)也一併轉義,這樣更安全。 - 本工具支援將十進位制數字引用(
&)、十六進位制數字引用(&)以及常用命名實體(如&)反轉義還原。 - 許多模板引擎(Blade、JSX、Vue 等)在插入變數時會自動進行 HTML 轉義,但如果使用
{!! !!}或 v-html 這類"原始 HTML 輸出"語法,就需要自行手動轉義。
常見問題
<、>、& 這三個字元會被 HTML 解析器當作語法的一部分來解釋。如果忘記轉義,瀏覽器可能會誤認為是標籤的開始或結束,從而導致頁面佈局錯亂,甚至引發XSS(惡意指令碼注入)攻擊。URL 編碼(百分號編碼)用於在 URL 中安全地表示特殊字元,而 HTML 轉義則是為了防止字元在 HTML 文件中被誤認為標籤。兩者用途不同,如果表單的值既要作為 URL 引數又要顯示在 HTML 中,有時需要同時進行兩種轉換。
不會。所有轉換處理都在瀏覽器內通過 JavaScript 完成,您輸入的文本不會被發送到 toolbase.cc 的伺服器。
不會。本工具只轉義
&、<、>、"、' 這 5 個字元。表情符號和中文等非 ASCII 字元在現代 UTF-8 環境下可以直接安全顯示,無需轉換。
閒話 ― 繼承自 SGML 的"字元引用"機制
HTML 實體(字元引用)的起源可以追溯到 HTML 的前身 SGML(標準通用標記語言)。1986 年標準化的 SGML 就已經具備了"字元引用"機制,用於在正文中使用標籤分隔符 < 本身。HTML 幾乎原封不動地繼承了這一機制,早在 20 世紀 90 年代 HTML 的初期規範中,<、>、& 等基本命名實體就已經被定義。
在 Unicode 尚未普及的年代,命名實體最初被廣泛用於在純 ASCII 環境下顯示印刷用的特殊符號,例如版權符號 ©、註冊商標符號 ® 以及各種希臘字母。HTML5 規範最終定義了超過 2000 種命名實體,甚至涵蓋了對勾符號、音符符號等冷門字元。
如今隨著 UTF-8 編碼的普及,為避免亂碼而使用字元引用的必要性已大大降低。但 <、>、& 這三個字元至今仍必須轉義,原因完全不同:它們對 HTML 解析器而言具有特殊的語法含義(分別代表標籤的開始、結束以及實體的開始),一旦忘記轉義,就可能直接導致頁面佈局錯亂或引發XSS 漏洞。