HTML實體編碼和解碼線上工具
貼上文字以將特殊字元編碼為HTML實體,或貼上含實體的HTML以解碼回可讀文字。可在命名實體(&、<、©)、十進位數字(©)或十六進位(©)編碼之間選擇。亦可選擇對所有非ASCII字元進行編碼以獲得最大相容性。
運作原理
什麼是HTML實體?
HTML實體是用於表示在HTML中具有特殊含義或無法直接輸入的字元的特殊文字代碼。最重要的是HTML語法中保留的五個字元:&(和號)→ &、<(小於號)→ <、>(大於號)→ >、"(雙引號)→ " 以及 '(單引號)→ '。若這些字元在文字內容中未經編碼出現,瀏覽器可能會將其解釋為HTML標記,進而導致渲染錯誤或安全漏洞。
HTML實體有三種格式:命名實體使用描述性名稱(© 表示 ©,€ 表示 €),十進位數字字元參考使用碼點編號(© 表示 ©),十六進位字元參考使用十六進位代碼(© 表示 ©)。三種格式完全等價——無論使用哪種格式,瀏覽器都會渲染相同的字元。命名實體可讀性最強;數字實體最為通用,因為它適用於任何Unicode字元。
何時需要編碼HTML實體
每當文字內容或屬性值中出現五個保留HTML字元(&、<、>、"、')時,至少必須對它們進行編碼。不進行編碼是跨站腳本(XSS)漏洞的根源:若使用者輸入未經編碼直接插入HTML,攻擊者可注入script標籤或事件處理程式。React、Vue和Angular等現代框架預設自動對HTML進行編碼——innerHTML是主要例外,手動編碼在此仍然至關重要。
除了必須編碼的五個字元外,對於無法可靠處理UTF-8的環境,您可能還需要對非ASCII字元進行編碼:HTML電子郵件、舊版CMS系統或追求最大相容性的文件。「編碼所有非ASCII字元」選項會將碼點127以上的每個字元轉換為數字實體,確保輸出為純ASCII,同時保留渲染時的視覺外觀。對於現代UTF-8 HTML檔案,對非ASCII字元進行編碼是可選的——正確宣告字元集即可。
HTML實體 vs URL編碼 vs Base64
HTML實體、URL編碼(百分比編碼)和Base64是用於不同場景的三種編碼方案。HTML實體(如 &)用於在HTML文件中安全地表示字元。URL編碼(如 %26 表示 &)用於在查詢字串和URL中對具有特殊含義的字元進行編碼。Base64將任意二進位資料編碼為ASCII文字,用於資料URI和電子郵件附件。
常見錯誤是將它們混淆:對HTML內容使用URL編碼,或對URL使用HTML編碼。例如,URL查詢字串中的和號需要百分比編碼(%26),而非HTML實體編碼(&)。若構建的URL隨後嵌入HTML屬性中,則兩者都需要:URL編碼的形式放入屬性,屬性值本身進行HTML編碼。理解哪種編碼適用於哪種上下文,可防止雙重編碼錯誤和安全問題。
常見問題
›和號(&)的HTML實體是什麼?
和號的HTML實體是 &——字面上由 &、a、m、p 和分號組成。在HTML原始碼中寫 & 時,瀏覽器會顯示單個 & 字元。每當和號出現在文字內容或屬性值中時,必須進行此編碼,因為未編碼的 & 會開始一個實體序列,解析器會嘗試對其進行解釋。
›版權符號(©)的HTML實體是什麼?
版權符號 © 有三個等價的HTML實體:命名實體 ©、十進位數字實體 © 和十六進位實體 ©。三者都渲染相同的 © 字元。命名實體是最具可讀性的選項。對於現代UTF-8 HTML,只要HTML檔案宣告了 charset=utf-8,也可以直接輸入 © 字元,無需使用實體。
›在HTML中需要對引號進行編碼嗎?
在雙引號分隔的HTML屬性內,雙引號(")必須編碼為 ",例如:<input value=""">。在單引號分隔的屬性內,單引號(')必須編碼為 ' 或 '。在元素文字內容中(標籤之間),兩種引號都可以不編碼出現,但編碼也無妨。在所有上下文中一致地對兩者進行編碼是最安全的做法。
›命名實體和數字實體有什麼區別?
命名實體使用描述性詞語(©、€、♥),在HTML規範中定義——並非每個Unicode字元都有命名實體。數字實體使用Unicode碼點,可以是十進位(€ 表示 €)或十六進位(€ 表示 €)。數字實體適用於任何Unicode字元,而命名實體只涵蓋其中一個子集。兩者在瀏覽器中的渲染效果完全相同。
›在HTML中需要對非ASCII字元進行編碼嗎?
通常不需要。若HTML文件宣告了UTF-8編碼(meta charset=utf-8)並以UTF-8儲存,則可以直接寫入非ASCII字元:é、ñ、中、🎉。將它們編碼為實體是可選的,會使原始碼更難閱讀。例外情況是在可能無法保留編碼的場景中發送HTML:電子郵件、舊版API或會損壞非ASCII位元組的系統。在這些情況下,將所有非ASCII字元編碼為數字實體可確保輸出為純安全ASCII。
›什麼是XSS?HTML實體如何防止它?
跨站腳本(XSS)是一種安全漏洞,攻擊者透過插入伺服器在未經編碼的情況下反映到HTML中的文字,將惡意JavaScript注入網頁。例如,若使用者輸入 <script>alert('xss')</script> 直接插入頁面,瀏覽器就會執行該腳本。若正確編碼輸入——將 < 轉換為 <,將 > 轉換為 >——瀏覽器會將文字原樣顯示,而非將其解析為標籤。HTML實體編碼是防禦反射型和儲存型XSS的主要手段。
›為什麼 不出現在此工具的列表中?
此工具對具有命名實體的字元進行編碼。當您輸入實際的不換行空格字元(在某些系統上可透過Alt+Space插入,或從字元對應表複製)時,不換行空格(Unicode U+00A0)將被編碼為 。普通空格(U+0020,空白鍵)不會被編碼,因為它是安全的ASCII字元。若輸出中特別需要 ,請在輸入中鍵入或貼上不換行空格字元。
›可以用此工具防止使用者輸入中的HTML注入嗎?
可以——在將使用者提供的文字插入HTML之前對其進行編碼,是防禦HTML注入和XSS的核心手段之一。至少需要編碼五個保留字元:&、<、>、"、'。此工具對這五個字元全部進行編碼。但是,僅靠編碼並不是完整的安全解決方案:還需要適當的Content Security Policy標頭、謹慎處理屬性中的javascript: URL以及框架級保護措施。對於生產應用,請使用專為安全設計的伺服器端函式庫(OWASP Java Encoder、客戶端DOMPurify等),而不是手動編碼。
相關工具
最後更新: