HTMLエンティティ変換
HTMLでエスケープが必要なのは5文字です。& は &、< は <、> は >、" は "、' は ' になります。<b> をデコードすると <b> に戻ります。
使い方
- 文字をエンティティにするならエンコード、エンティティを文字に戻すならデコードを選び、テキストを貼り付けます。
- エンコードでは変換の範囲を選びます。基本はHTMLで危険な5文字だけ。名前付きは © のように名前があるものは名前で書きます。10進と16進はASCII以外のすべての文字を数値エンティティにします。
- 結果をコピーします。デコードでは、見つかったエンティティの数も表示します。
計算方法
HTMLエンティティは & で始まりセミコロンで終わる、1文字を表す書き方です。名前(&)、10進のコードポイント(&)、16進のコードポイント(&)の3つの形があり、どれも同じ意味です。
テキストと属性値でエスケープが必要なのは & < > " ' の5文字です。& や < がそのまま残ると、ブラウザがエンティティやタグの始まりと読むことがあります。' はHTML 4に含まれないため、アポストロフィは ' と書きます。
名前付きエンティティがあるのはLatin-1の範囲(アクセント付き文字、©、®、£ など)と、—、…、€ などのよく使う記号です。ひらがな、漢字、絵文字のように名前のない文字は数値エンティティになります。絵文字はコードポイント単位なので、1つの絵文字は2つではなく1つのエンティティです。
デコードでは、知らないものはそのまま残します。0、U+10FFFF を超える値、サロゲートの片割れを指す数値エンティティは、ブラウザと同じく置換文字 U+FFFD になります。
よく使うHTMLエンティティ
| 文字 | 名前 | 数値 |
|---|---|---|
| & | & | & |
| < | < | < |
| > | > | > |
| " | " | " |
| ' | (HTML 4にはなし) | ' |
| ノーブレークスペース | |   |
| © | © | © |
| € | € | € |
| — | — | — |
| … | … | … |
よくある質問
エンコードすればXSS対策になりますか?
信頼できないテキストをHTMLの要素の中やクォートで囲んだ属性値に入れるなら、5文字のエスケープが正しい対策です。ただしscriptの中、クォートなしの属性、URLにはそれぞれ別のエスケープが必要で、この変換だけでは守れません。
日本語や絵文字もエンコードが必要ですか?
ページがUTF-8で配信されていれば不要です。今はそれが標準です。ファイルやシステムがその文字を扱えないときだけ数値エンティティを使ってください。
と普通のスペースの違いは?
ノーブレークスペースは見た目はスペースですが、前後の語を同じ行につなぎ止め、連続しても1つにまとめられません。レイアウト目的で多用するのは避けましょう。
&foo; のような名前が変換されないのは?
デコーダーが知っているのはLatin-1の名前と下の表のようなよく使う名前、合わせて約130種類です。知らないエンティティは推測せず、そのまま残します。
テキストはサーバーに送られますか?
いいえ。エンコードもデコードもブラウザの中で行います。