什麼是HTML 實體編碼/解碼器?
HTML 實體編碼/解碼器可將 <、>、& 及引號等特殊字元與其 HTML 實體表示(如 <、>)相互轉換,有效防止在 HTML 中嵌入使用者內容時產生 XSS 漏洞,並解決特殊字元的顯示異常問題。
編碼器將 <, >, &, ", ' 等字元以及任何 Unicode 碼點轉換為具名實體(&, <)、十進位數字參照(&)或十六進位數字參照(&)。範圍選擇器可只編碼五個保留字元、所有特殊字元,或每個非 ASCII 字元。解碼可還原三種格式中的任何一種。適合在輸出 HTML 前淨化使用者輸入,或從 HTML 信件匯出中還原文字。
使用方法
- 步驟一 — 貼上含有特殊字元或 HTML 實體的文字。
- 步驟二 — 選擇「編碼」將字元轉換為實體,或選擇「解碼」將實體還原為字元。
- 步驟 3 — 選擇格式(具名、十進位或十六進位)與範圍以控制編碼強度。
何時使用
- 把程式碼範例貼到 CMS,避免 < 和 > 被當成 HTML 標籤而消失。
- 整理從 HTML 郵件或網頁抓取下來、還留著 —、 的內容。
- 在伺服器端模板輸出使用者輸入前先轉義,阻擋 XSS 注入。
結果
您需要在 HTML 段落中展示程式碼片段 <div class=hero>,對其進行編碼後得到 <div class="hero">,本機將以文字形式呈現,而不會將其解析為 HTML 標籤。
常見問題
- 命名實體和數字實體有什麼差別?
- 命名實體是可讀的縮寫,例如 © 代表 ©。數字實體用 Unicode 碼點表示,例如 © 或十六進位 ©。數字實體可涵蓋所有 Unicode 字元;命名實體只包含 HTML5 規範定義的約 250 個字。
- 是不是每個特殊字元都要編碼?
- 在 HTML 內文中只需編碼 & < > 以及屬性值使用的引號。在 JavaScript 或 URL 情境下規則不同。範圍選擇器提供三種選項:僅保留字元 — 針對五個 XSS 關鍵字元,所有特殊字元 — 在保留字元之外加入排版符號,所有非 ASCII — 提供最廣泛的涵蓋。
- 編碼後會影響複製貼上或螢幕閱讀器嗎?
- 不會。瀏覽器在渲染前會先把實體解碼,使用者看到、複製到的都是原始字元。螢幕閱讀器拿到的同樣是解碼後的文字。實體只是傳輸時的標記形式,不是最終呈現。
- 只做 HTML 實體編碼能擋住 XSS 嗎?
- 對 HTML 內文夠用。放在屬性內還要把屬性加引號並編碼該引號字元。JavaScript、CSS、URL 等上下文各有自己的轉義規則,編碼只是第一層,不是全部。
- 為什麼有些實體寫 &#x、有些只寫 &#?
- &#x 後面接十六進位碼點,&# 後面是十進位。兩者指同一字元,例如 © 和 © 都顯示為 ©。十六進位對應 Unicode 表的 U+ 表示法,高位碼點寫起來更短。