toolfree

HTML 字元編碼

在瀏覽器裡轉義 HTML 特殊字元,可以選擇只轉 HTML 必需的最小集合,或全部數值化。

在你的瀏覽器中執行

第一個幾乎永遠是對的。最後一個會把中文內容膨脹好幾倍,只有舊系統才需要。

結果

還沒有東西可以轉換。

真正重要的只有五個字元,其餘都是偏好

只有五個字元會改變瀏覽器解析 HTML 的方式:&<>"'。把這五個轉義掉,就是 「讓文字不會被當成標記讀取」的全部,也是這個操作中唯一跟安全有關的部分。

其他所有東西——©£、中文、emoji——在一份 UTF-8 文件裡都只是普通文字,完全不需要 轉義。所以**「只轉 HTML 必須轉的」幾乎永遠是對的**,它也是預設值。

另外兩個選項有其真實但狹窄的用途:

順序有意義,這就是 & 要先轉的原因

& 必須第一個被轉義。如果它排在最後,< 會先變成 &lt;,接著那個 & 又會被轉一次變成 &amp;lt;,顯示出來就是字面上的 &lt; 而不是一個小於符號。

轉義不是冪等的,也不該是。跑兩次本來就會得到不同的結果——這正是為什麼你應該在輸出的那一刻 轉義一次,而不是把轉義過的文字存進資料庫。

解碼三種寫法都吃

&nbsp;&#160;&#xA0; 是同一個字元的三種寫法,解碼器三種都接受,也包括舊標記裡會 出現的大寫 &#X 變體。

任何它不認得的東西都會原封不動留著。R&D 還是 R&D,不會被弄亂,因為一個後面沒有接合法 實體的 &,就只是一個 & 而已。

有兩種情況是刻意拒絕的:指向單一代理碼位的escape(&#xD800;),以及超出 Unicode 範圍的escape。 兩者都不是字元,硬要生出一個只會讓輸出壞掉。

這不是消毒

轉義讓文字可以安全地顯示,但不會讓不受信任的 HTML 可以安全地嵌入——那需要一個懂得 標籤與屬性的消毒工具。如果你要把使用者送出的標記貼進頁面裡,這不是你要的工具。

沒有任何上傳

全部都在這個頁面裡執行。