UltKit

HTML 實體編碼與解碼工具

跳脫 HTML 會當成標記的字元,也可選擇連同所有非 ASCII 字元一起跳脫;或將 é、— 這類實體轉回純文字。兩個方向都在您的瀏覽器中執行,解碼後的內容絕不會被當成實際 HTML 呈現。

模式
實體樣式
跳脫範圍

0 個字元 · 0 個字詞 · 0 行

0 個字元 · 0 個字詞 · 0 行

完全在此瀏覽器分頁中執行,您的文字不會被上傳或儲存。

常見字元與其實體

具名、十進位與十六進位形式解碼後都是同一個字元。編碼器認得 216 個常用具名實體;解碼器可辨識 HTML 標準中的每個具名參照。

字元具名十進位十六進位
&&&&
<&lt;&#60;&#x3C;
>&gt;&#62;&#x3E;
"&quot;&#34;&#x22;
'&apos;&#39;&#x27;
(不換行空格)&nbsp;&#160;&#xA0;
©&copy;&#169;&#xA9;
®&reg;&#174;&#xAE;
™&trade;&#8482;&#x2122;
€&euro;&#8364;&#x20AC;
£&pound;&#163;&#xA3;
¥&yen;&#165;&#xA5;
—&mdash;&#8212;&#x2014;
–&ndash;&#8211;&#x2013;
…&hellip;&#8230;&#x2026;
«&laquo;&#171;&#xAB;
»&raquo;&#187;&#xBB;
°&deg;&#176;&#xB0;
×&times;&#215;&#xD7;
÷&divide;&#247;&#xF7;
é&eacute;&#233;&#xE9;
π&pi;&#960;&#x3C0;
→&rarr;&#8594;&#x2192;
😀—&#128512;&#x1F600;

從 HTML 4 的 252 個實體到 HTML5 的 2,231 個

字元參照是只用 ASCII 寫出任意字元的方法。數字參照適用於任何 Unicode 碼位,可用十進位(&#233;)或十六進位(&#xE9;)。具名參照比較好記:HTML 4 定義了 252 個,涵蓋 &eacute; 這類 Latin-1 字母、希臘字母、數學符號,以及 &mdash;、&hellip; 等排版符號。奇怪的是 &apos; 並不在其中;它來自 XML,直到 HTML5 才成為有效的 HTML。

HTML5 把具名字元參照擴充到 2,231 個,並納入 MathML 的實體集,因此 &check;、&bigstar;、&NotEqualTilde; 這類名稱現在在所有主流瀏覽器都能使用。這個數量也包含沒有結尾分號的舊式寫法,例如 &amp 和 &copy,解析器為了相容性仍會接受,但你不應該這樣寫。這裡的編碼器會輸出廣泛支援的 HTML 4 名稱加上 &apos;,其餘字元一律改用數字參照;解碼器則把文字交給瀏覽器本身的解析器處理,所以 2,231 個名稱全都看得懂。

哪些字元需要跳脫,以及跳脫不足以防護的情況

Only & < > " ' 是日常使用的設定:它會跳脫五個可能結束文字節點或引號屬性的字元,足以在網頁上顯示程式碼範例,或把使用者輸入的文字安全地放進 HTML。Also every non-ASCII character 會把 é、€ 和表情符號也轉成參照,適用於少數無法傳送 UTF-8 的情況,例如某些舊式電子郵件範本,或會弄亂編碼的系統。Named、Decimal 和 Hex 只改變參照的寫法,三者解碼後都是同一個字元。以 UTF-8 儲存的網頁,帶重音的字母不需要使用實體。

跳脫只保護 HTML 情境,其他情境不在此列。插入 script 區塊、onclick 這類行內事件處理器、style 屬性,或可能以 javascript: 開頭的 href 的文字,需要另外處理,單靠實體編碼無法防止跨網站指令碼攻擊(XSS)。React 等框架預設就會跳脫文字,所以在現代應用程式中,重複跳脫反而是更常見的錯誤:使用者會在該顯示 & 的地方看到 &amp;。若要完全移除標籤,請用 HTML 轉 TXT 轉換標記;若要跳脫網址內的字元,請使用 URL 編碼與解碼。

常見問題

HTML 中哪些字元必須跳脫?
在文字中,& 和 < 是必須跳脫的,> 則是慣例上也會跳脫。在屬性值內,還要跳脫用來包住該值的引號字元。五個全部跳脫就能涵蓋兩種情況。
&nbsp; 和一般空格有什麼不同?
&nbsp; 是不換行空格,即 U+00A0。它看起來像空格,但會避免在該處換行,而且連續出現多個時不會像 HTML 中的一般空格那樣被合併。
為什麼網頁顯示 &amp; 而不是 & 符號?
文字被跳脫了兩次:一次在你的資料中,另一次由範本或框架處理。請儲存原始文字,只讓一個層級(通常是範本)在輸出時負責跳脫。
在這裡解碼來源不可信的 HTML 安全嗎?
可以。解碼器會把輸入當作純文字內容來解析,所以不會產生標籤、不會執行指令碼,也不會載入圖片。只有實體參照會被轉成字元。
具名實體和數字實體哪個比較好?
具名參照比較好讀,數字參照則適用於所有字元,在所有 XML 解析器中也都能用。在沒有 DTD 的 XML 中,只有 &amp;、&lt;、&gt;、&quot; 和 &apos; 是預先定義好的。