HTML 轉義/反轉義

將 &、<、>、"、' 等特殊字元轉換為 HTML 實體(轉義),或將實體還原為原始字元(反轉義)。適用於防範 XSS 攻擊及在 HTML 中嵌入文本。

常用命名 HTML 實體一覽

字元 命名實體 數字字元引用 說明
& &amp; &#38; 和號(表示"and"的符號)
< &lt; &#60; 小於號(與 HTML 標籤的起始字元相同)
> &gt; &#62; 大於號(與 HTML 標籤的結束字元相同)
" &quot; &#34; 雙引號(屬性值的分隔符)
' &apos; &#39; 單引號(屬性值的分隔符)
  &nbsp; &#160; 不換行空格(不會觸發換行的空白字元)
© &copy; &#169; 版權符號
® &reg; &#174; 註冊商標符號
&trade; &#8482; 商標符號
&euro; &#8364; 歐元符號
¥ &yen; &#165; 日元符號
¢ &cent; &#162; 美分符號

使用技巧

  • HTML 轉義是防範 XSS(跨站指令碼攻擊)的基礎手段。在將使用者輸入嵌入 HTML 之前,務必先進行轉義處理。
  • & 必須最先轉義。如果先轉換其他字元,新生成的 &amp; 中的 & 會被再次轉義,造成重複轉義。
  • 在屬性值中嵌入字串時,除了 "(雙引號)外,最好連 '(單引號)也一併轉義,這樣更安全。
  • 本工具支援將十進位制數字引用&#38;)、十六進位制數字引用&#x26;)以及常用命名實體(如 &amp;)反轉義還原。
  • 許多模板引擎(Blade、JSX、Vue 等)在插入變數時會自動進行 HTML 轉義,但如果使用 {!! !!} 或 v-html 這類"原始 HTML 輸出"語法,就需要自行手動轉義。

常見問題

&lt;&gt;&amp; 這三個字元會被 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 的初期規範中,&lt;&gt;&amp; 等基本命名實體就已經被定義。

在 Unicode 尚未普及的年代,命名實體最初被廣泛用於在純 ASCII 環境下顯示印刷用的特殊符號,例如版權符號 &copy;、註冊商標符號 &reg; 以及各種希臘字母。HTML5 規範最終定義了超過 2000 種命名實體,甚至涵蓋了對勾符號、音符符號等冷門字元。

如今隨著 UTF-8 編碼的普及,為避免亂碼而使用字元引用的必要性已大大降低。但 <、>、& 這三個字元至今仍必須轉義,原因完全不同:它們對 HTML 解析器而言具有特殊的語法含義(分別代表標籤的開始、結束以及實體的開始),一旦忘記轉義,就可能直接導致頁面佈局錯亂或引發XSS 漏洞