一個完全在瀏覽器中運作的 HTML 跳脫 API 替代方案,可讓您將保留的 HTML 字元轉換為安全參考(或反向解碼),無需上傳文字或等待網路回應。HTML Entity Encoder / Decoder 可立即處理這兩項任務:將 & 符號、小於、大於、雙引號和單引號編碼為標準的 HTML 安全形式,並可選擇性地將 126 以上的每個非 ASCII 碼位轉換為大寫十六進位數值參考。解碼模式則反轉此流程,使用瀏覽器目前的 WHATWG 具名字元參考表來解析具名實體(如 ©)、十進位參考(如 ©)和十六進位參考(如 ©),並將其轉為對應的 Unicode 字元。由於此工具在本機端運作,因此沒有速率限制、沒有外部相依性,也沒有隱私疑慮——輸入內容永遠不會離開瀏覽器。
此方法非常適合需要在安全 HTML 插入前準備使用者產生文字、除錯格式錯誤的標記,或遷移依賴數值參考的舊有內容的開發人員。與遠端 API 不同,基於瀏覽器的編碼器絕不會逾時、不按次數收費,也不會將敏感資料洩露給第三方伺服器。此工具也避免了常見的雙重編碼陷阱:它會先編碼 & 符號,因此在同一次操作中,新建立的參考不會被再次編碼。對於需要非 ASCII 字元數值參考的工作流程(例如舊系統、傳輸層或教學範例),非 ASCII 模式會將 126 以上的每個碼位轉換為大寫十六進位參考,同時保持 ASCII 字母、數字、空格、定位字元和換行符的可讀性。

何時使用基於瀏覽器的 HTML 跳脫工具
當您需要在不依賴遠端 API 的情況下跳脫或還原 HTML 字元時,可使用 HTML Entity Encoder / Decoder。常見情境包括:
- 準備使用者產生的內容,以便安全地插入到 HTML 範本或 CMS 欄位中。
- 除錯或清理包含混合具名與數值參考的格式錯誤標記。
- 遷移對非 ASCII 字元使用數值參考的舊有內容。
- 在不讓學生接觸伺服器端相依性的情況下,教學或示範 HTML 字元參考的運作方式。
- 網路存取受限或不穩定的本機開發或測試。
此工具無法取代框架的自動跳脫、可信的範本引擎,或專門的清理工具。它不會清理 HTML 文件,也無法讓任意插入情境變得安全。相反地,它提供了一種快速、私密的方式,可在字面字元與 HTML 參考之間轉換,讓您能將輸出整合到具有上下文感知的工作流程中。
HTML 字元跳脫的運作原理
HTML 使用特定字元——& 符號 (&)、小於 (<)、大於 (>)、雙引號 (") 和單引號 (')——來定義標記語法。當您需要將這些字元作為字面文字包含在 HTML 文件中時,必須將其跳脫,以防止瀏覽器將其解讀為標記。跳脫會將這些保留字元轉換為具名或數值參考,瀏覽器會將其呈現為原始字元。例如,小於符號 (<) 在瀏覽器中會顯示為 <,但底層 HTML 原始碼包含的是 <。
WHATWG HTML 動態標準定義了一個全面的具名字元參考表,包括舊有別名和對應到多個碼位的參考。例如,具名參考 © 會解析為版權符號 (©),而 ∉ 則解析為「不屬於」符號 (∉)。數值參考(例如十進位的 © 或十六進位的 ©)提供了一種表示任何 Unicode 字元的方式,包括那些沒有具名參考的字元。瀏覽器的 HTML 解析器會同時處理具名和數值參考,在渲染期間將其轉換為對應的 Unicode 字元。
在為 HTML 跳脫文字時,選擇適合您使用情境的模式非常重要。基本編碼僅替換五個保留語法字元,將 © 或 😀 等非 ASCII 字元保留為字面 Unicode。對於現代 UTF-8 HTML,建議使用此方法,因為不必要的參考會降低可讀性。另一方面,非 ASCII 模式會將 ASCII 126 以上的每個碼位轉換為大寫十六進位數值參考,這對舊系統或需要數值表示的工作流程很有用。編碼器會逐一處理 Unicode 碼位而非 UTF-16 碼元,確保表情符號和補充字元會被編碼為單一參考,而非無效的代理對。
逐步編碼或解碼 HTML 字元
- 在瀏覽器中開啟 HTML Entity Encoder / Decoder 工具。
- 選擇您要執行 編碼字元 或 解碼參考。
- 若要編碼,請選擇編碼模式:
- 基本:僅跳脫 & 符號、小於、大於、雙引號和單引號。
- 非 ASCII:跳脫相同的語法字元,並額外將 ASCII 126 以上的每個碼位轉換為大寫十六進位數值參考。
- 將您的原始文字貼到輸入區域。此工具最多接受 500,000 個 JavaScript 字元。
- 選擇 Convert 按鈕來處理文字。
- 檢查輸出中的保留字元,特別是 & 符號和角括號。此工具會先編碼 & 符號,以防止新建立的參考被雙重編碼。
- 請在確認輸出符合您的預期用途後再複製輸出。請記住,解碼後的文字可能包含看起來像標記的字元,因此應將其視為不受信任的資料,並在最終輸出邊界使用具有上下文感知的跳脫。
上下文敏感的跳脫:此工具無法做到的事
HTML Entity Encoder / Decoder 專為通用 HTML 語法跳脫和參考解碼而設計,但它並非適用於所有文字安全需求的通用解決方案。字元參考具有上下文敏感性,這表示同一個跳脫後的字串可能並非在所有 HTML 情境中都安全,更不用說 JavaScript、CSS、SQL 或 HTTP 標頭等其他語言了。例如:
- 為 HTML 文位元組點編碼文字,與安全地建構 URL、JavaScript 字串或 CSS 值並不相同。每種情境都需要其專屬的跳脫規則。
- 此工具不會清理 HTML 文件,也無法防止注入攻擊。解碼參考可能會顯示出看起來像標記的文字,例如 <script> 會變成字面字元 <script>。雖然此工具不會執行此字串,但將其複製到不安全的 innerHTML 接收器中可能會造成漏洞。
- XML 具有比 HTML 更小的預定義實體集和不同的解析規則。如果您的下游系統使用 XML,請記住 XML 解析器可能無法辨識所有 HTML 具名參考。
為了可靠使用,請務必先選擇操作、貼上一個小型代表性樣本、執行轉換,然後在處理較大區塊之前先檢查輸出。請在確認接收情境後再複製結果。如果您需要為特定框架或範本引擎跳脫文字,請參閱其文件中關於上下文感知跳脫函式的說明,例如 WordPress 中的 esc_html() 或 React 中的自動跳脫。
編碼模式比較
| 模式 | 跳脫的字元 | 非 ASCII 處理方式 | 使用情境 |
|---|---|---|---|
| 基本 | & 符號 (&)、小於 (<)、大於 (>)、雙引號 (")、單引號 (') | 保留為字面 Unicode | 優先考量可讀性的現代 UTF-8 HTML |
| 非 ASCII | 與基本模式相同 | 轉換為大寫十六進位數值參考(例如,© 變為 ©) | 需要數值參考的舊系統、傳輸層或教學範例 |
解碼 HTML 參考:預期結果
解碼模式會將所有目前的 WHATWG 具名、十進位和十六進位參考解析為對應的 Unicode 字元。此工具使用一個分離的 textarea 元素,要求瀏覽器的 HTML 解析器套用完整的具名字元參考表,包括舊有別名和對應到多個碼位的參考。例如:
- 具名參考 © 會解碼為版權符號 (©)。
- 十進位參考 © 也會解碼為 ©。
- 十六進位參考 © 同樣會解碼為 ©。
- 具名參考 ∉ 會解碼為「不屬於」符號 (∉),這是一個單一 Unicode 字元。
- 具名參考 ¬ 會解碼為「否定符號」(¬),這與 ∉ 並不相同。
由於解碼工作是由瀏覽器的解析器處理,因此此工具支援完整的現行表格,無需進行遠端擷取或手動更新。然而,解碼後的輸出可能包含看起來像標記的字元,因此應一律將其視為不受信任的文字。切勿在未經額外上下文感知跳脫的情況下,將解碼後的輸出直接放入不安全的 HTML 接收器,例如 innerHTML 或 document.write()。
實際範例:跳脫使用者產生的內容
假設您正在建立一個部落格留言系統,並需要在 HTML 範本中安全地顯示使用者產生的文字。使用者提交了以下留言:
I love this post! <script>alert('XSS');</script> 😀若要在 HTML 中安全地呈現此留言,您需要跳脫保留語法字元,同時保留表情符號。使用 HTML Entity Encoder / Decoder 的基本模式,輸入會被轉換為:
I love this post! <script>alert('XSS');</script> 😀在瀏覽器中呈現時,此輸出會顯示為原始留言,其中的 script 標籤會以字面文字顯示,而不是作為標記執行。表情符號 (😀) 會保持不變,因為它是非 ASCII 字元,且基本模式不會將其轉換為數值參考。如果您使用的是需要非 ASCII 字元數值參考的舊系統,則應使用非 ASCII 模式,該模式會將表情符號轉換為 😀。
相關閱讀:無需遠端呼叫的文字隱寫術 API 替代方案。
相關閱讀:HTML 批次跳脫:無需上傳即可處理大量貼上內容。