本文へスキップ

HTMLエンティティ変換

HTML Entity Encoder

HTMLの実体参照をエスケープして元に戻し、名前・10進・16進の書き方を出し分けます。

文字をHTMLのエンティティに変換し、また戻します。`&`、`&`、`&`の表記を選べ、どこまでエスケープするかも決められます。デコードのときはHTMLのパース仕様が求めるWindows-1252への読み替えも適用するので、`’`が制御文字ではなく丸いアポストロフィとして戻ります。

🔒 ブラウザの中だけで動きますhtmlentityescape
ルール
向き
エスケープ

`&`、`<`、`>` だけ。タグとタグのあいだに入れるのに必要なのはこれで全部で、それ以上ではありません。

表記

テキスト

符号化された値

XMLが定める五つ

XMLがあらかじめ定義した五つの実体参照。
文字名前10進16進
&&amp;&#38;&#x26;
<&lt;&#60;&#x3C;
>&gt;&#62;&#x3E;
"&quot;&#34;&#x22;
'&apos;&#39;&#x27;

DTDなしでXMLが持つ名前付き参照はこの五つだけです。XML文書のそれ以外はすべて数値参照でなければなりません。

使い方

  1. どこまでエスケープするかを決めます

    テキスト内容は`&`、`<`、`>`だけを変えます。タグとタグのあいだに置くのに必要なのはそれで全部です。属性値はそこにクォート2種類を足します。非ASCIIすべては、UTF-8を運べないパイプライン向けで、日本語のテキストは7倍ほどに膨らみます。

  2. 表記を選びます

    名前(`&amp;`)がいちばん読みやすい形です。10進数と16進数は数値参照なのでXMLでも動きます。XMLはDTDが無ければ名前付きの参照が5つしかありません。

  3. あるいは逆向きに戻します

    エスケープ解除に切り替えて、エンティティだらけの文章を貼り付けます。表に無い参照は一覧にして知らせ、消さずに書かれたままにします。

よくある質問

一部のエンティティがそのまま残ったのはなぜですか

HTML5は名前付きの参照を2231個定義していますが、ここの表はその中から選んだ部分集合です。Latin-1の文字すべて、約物、ギリシャ文字、矢印、よく使う数学記号です。それ以外のものは黙って捨てるのではなく、注記に名前を挙げて知らせます。そちらのほうが正直な失敗のしかたです。

エンティティに変えればXSSを防げますか

テキスト内容と、クォートで囲んだ属性値には正しいエスケープです。それ以外の場所では足りません。`<script>`ブロックの中、`javascript:`のURL、クォートの無い属性、CSSの文脈では、エンティティのエスケープは何の役にも立ちません。エスケープは、それが置かれる文脈に合っていなければなりません。

`&#146;`がアポストロフィとしてデコードされるのはなぜですか

HTMLのパース仕様が、数値参照の0x80–0x9Fのコードポイントを、その位置のWindows-1252の文字へ読み替えるよう定めているからです。文字どおりに解くと、目に見えないC1制御文字になります。Wordから貼り付けた文章を素朴なデコーダで解くと、まさにそうなります。

XMLで`&nbsp;`を使えますか

それを宣言したDTDが無ければ使えません。XMLがあらかじめ定義している名前付きの参照は`&amp;` `&lt;` `&gt;` `&quot;` `&apos;`の5つだけで、ページ下部の表にその5つがまとまっています。それ以外はすべて数値参照でなければなりません。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。