使用方式
- 選擇「編碼」讓文字可安全放入 HTML,或選擇「解碼」將實體還原為字元。
- 編碼時,可選擇保留重音字母和符號,或將它們轉換成實體。
- 輸入或貼上文字,結果會立即更新。
- 複製結果,或使用「將輸出設為輸入」確認解碼後是否還原為原始內容。
運作方式
在 HTML 中,少數字元具有特殊用途:< 用來開始標籤,& 用來開始字元實體,而 " 或 ' 用來結束屬性值。若要將這些字元顯示為文字,必須寫成字元參照:< 對應 <、> 對應 >、& 對應 &、" 對應 ",而 ' 對應 '。單引號使用數字形式,因為 ' 未定義於 HTML 4。
儲存及傳送網頁時,只要使用 UTF-8(現代網站的預設編碼),其他所有字元,包括帶重音符號的字母、中文和 emoji,都可以直接書寫。只有在不支援 UTF-8 的系統中,例如某些舊式電子郵件範本或資料庫,才需要將它們轉換為字元實體。接著,您可以選擇常見字元使用命名實體(其他字元則使用數字形式),例如 é;也可以讓所有字元都使用數字參照,例如 é。
解碼時不會使用瀏覽器的 HTML 剖析器,而是使用內建對照表,其中包含 HTML 4.01 的全部 252 個命名實體、'、約 30 個常見的 HTML5 名稱,以及十進位和十六進位參照。數字參照會遵循 HTML5 規則:�、代理值和大於 U+10FFFF 的值會轉換為替代字元 �;128–159 的值則會依 Windows-1252 解讀,因此 – 會轉換為 en dash。部分舊版名稱,例如 & 和 ©,也接受省略結尾分號的寫法,就像瀏覽器一樣。HTML5 定義了超過 2,000 個名稱;未收錄於對照表中的少見名稱會維持原樣並列出。
將文字插入 HTML 前先跳脫,是防範跨網站指令碼(XSS)的重要措施,但這只適用於元素內容和加上引號的屬性值。插入 <script> 區塊、style 屬性或 URL 的文字需要使用不同的跳脫方式。
範例
在網頁上顯示程式碼
若要在部落格文章中以文字顯示 <div class="box">,請將它編碼為 <div class="box">。瀏覽器會顯示原始標籤,而不會建立元素。
為舊式電子郵件範本準備文字
選擇「可用時使用命名實體」後,「Café – 5 €」會轉換為 Café – 5 €,即使電子郵件使用非 UTF-8 字元集寄送,也能正確顯示。
清理擷取或匯出的文字
CMS 匯出內容包含 Fish & Chips – £9。解碼後會變成 Fish & Chips – £9,可直接貼到試算表。
常見問題
HTML 中哪些字元必須跳脫?
在元素內容中,& 和 < 必須跳脫(也建議跳脫 >)。在屬性值中,也要跳脫包住值的引號。這個工具採用簡單且安全的規則:在所有情況下都跳脫五個字元(& < > " ')。
命名實體和數字實體有什麼差異?
命名實體(例如 ©)比較容易閱讀,但只適用於有限的字元。數字字元參照(例如十進位的 © 或十六進位的 ©)則適用於所有 Unicode 字元,包括表情符號。
為什麼 解碼後看起來像空格?
是不換行空格(U+00A0)。它看起來像一般空格,但會避免換行,也不會被 HTML 合併。它和一般空格是不同的字元,因此比較或搜尋文字時需要留意。
é 這類重音字母也需要編碼嗎?
如果網頁使用 UTF-8(<meta charset="utf-8">),就不需要;幾乎所有現代網頁都使用 UTF-8。保留預設設定即可,只有五個特殊字元會被跳脫。
編碼就足以防止 XSS 嗎?
對於插入 HTML 元素內容或加上引號的屬性值中的不可信文字,這樣就足夠了。但對 JavaScript 程式碼、CSS、未加引號的屬性或 href="javascript:…" 這類 URL 並不足夠,這些情況需要依照使用情境採取不同處理方式。
隱私權
編碼和解碼都在瀏覽器中以純字串操作完成;文字不會以 HTML 方式呈現、不會上傳或儲存,也不會納入分析資料。