tigtools

HTML 實體編碼器/解碼器

讓文字可安全放入 HTML,或將 & 和 é 等實體還原為一般字元。

在瀏覽器中執行 免註冊

轉換方向

& < > " 和 ' 一律會跳脫。其他字元只有在選擇轉換非 ASCII 字元的選項後才會轉換。

使用方式

  1. 選擇「編碼」讓文字可安全放入 HTML,或選擇「解碼」將實體還原為字元。
  2. 編碼時,可選擇保留重音字母和符號,或將它們轉換成實體。
  3. 輸入或貼上文字,結果會立即更新。
  4. 複製結果,或使用「將輸出設為輸入」確認解碼後是否還原為原始內容。

運作方式

在 HTML 中,少數字元具有特殊用途:< 用來開始標籤,& 用來開始字元實體,而 " 或 ' 用來結束屬性值。若要將這些字元顯示為文字,必須寫成字元參照:< 對應 &lt;、> 對應 &gt;、& 對應 &amp;、" 對應 &quot;,而 ' 對應 &#39;。單引號使用數字形式,因為 &apos; 未定義於 HTML 4。

儲存及傳送網頁時,只要使用 UTF-8(現代網站的預設編碼),其他所有字元,包括帶重音符號的字母、中文和 emoji,都可以直接書寫。只有在不支援 UTF-8 的系統中,例如某些舊式電子郵件範本或資料庫,才需要將它們轉換為字元實體。接著,您可以選擇常見字元使用命名實體(其他字元則使用數字形式),例如 &eacute;;也可以讓所有字元都使用數字參照,例如 &#xE9;。

解碼時不會使用瀏覽器的 HTML 剖析器,而是使用內建對照表,其中包含 HTML 4.01 的全部 252 個命名實體、&apos;、約 30 個常見的 HTML5 名稱,以及十進位和十六進位參照。數字參照會遵循 HTML5 規則:&#0;、代理值和大於 U+10FFFF 的值會轉換為替代字元 �;128–159 的值則會依 Windows-1252 解讀,因此 &#150; 會轉換為 en dash。部分舊版名稱,例如 &amp 和 &copy,也接受省略結尾分號的寫法,就像瀏覽器一樣。HTML5 定義了超過 2,000 個名稱;未收錄於對照表中的少見名稱會維持原樣並列出。

將文字插入 HTML 前先跳脫,是防範跨網站指令碼(XSS)的重要措施,但這只適用於元素內容和加上引號的屬性值。插入 <script> 區塊、style 屬性或 URL 的文字需要使用不同的跳脫方式。

範例

在網頁上顯示程式碼

若要在部落格文章中以文字顯示 <div class="box">,請將它編碼為 &lt;div class=&quot;box&quot;&gt;。瀏覽器會顯示原始標籤,而不會建立元素。

為舊式電子郵件範本準備文字

選擇「可用時使用命名實體」後,「Café – 5 €」會轉換為 Caf&eacute; &ndash; 5 &euro;,即使電子郵件使用非 UTF-8 字元集寄送,也能正確顯示。

清理擷取或匯出的文字

CMS 匯出內容包含 Fish &amp; Chips &#8211; &pound;9。解碼後會變成 Fish & Chips – £9,可直接貼到試算表。

常見問題

HTML 中哪些字元必須跳脫?

在元素內容中,& 和 < 必須跳脫(也建議跳脫 >)。在屬性值中,也要跳脫包住值的引號。這個工具採用簡單且安全的規則:在所有情況下都跳脫五個字元(& < > " ')。

命名實體和數字實體有什麼差異?

命名實體(例如 &copy;)比較容易閱讀,但只適用於有限的字元。數字字元參照(例如十進位的 &#169; 或十六進位的 &#xA9;)則適用於所有 Unicode 字元,包括表情符號。

為什麼 &nbsp; 解碼後看起來像空格?

&nbsp; 是不換行空格(U+00A0)。它看起來像一般空格,但會避免換行,也不會被 HTML 合併。它和一般空格是不同的字元,因此比較或搜尋文字時需要留意。

é 這類重音字母也需要編碼嗎?

如果網頁使用 UTF-8(<meta charset="utf-8">),就不需要;幾乎所有現代網頁都使用 UTF-8。保留預設設定即可,只有五個特殊字元會被跳脫。

編碼就足以防止 XSS 嗎?

對於插入 HTML 元素內容或加上引號的屬性值中的不可信文字,這樣就足夠了。但對 JavaScript 程式碼、CSS、未加引號的屬性或 href="javascript:…" 這類 URL 並不足夠,這些情況需要依照使用情境採取不同處理方式。

隱私權

編碼和解碼都在瀏覽器中以純字串操作完成;文字不會以 HTML 方式呈現、不會上傳或儲存,也不會納入分析資料。