piapia123
ja

HTML 実体参照のエンコードとデコード

エンコード・暗号

処理はすべてブラウザ内で完結します。データは送信されません

入力
出力

< > & " とシングルクォートを実体参照に変換し、逆に実体参照を文字へ戻します。エンコードで触るのはこの 5 文字だけです —— HTML で本当に構文上の意味を持つ文字であり、タグがどこから始まり、属性値がどこで終わるかを決めます。それ以外の文字はリテラルのままで完全に合法で、まとめて実体参照にすると出力が読めなくなり、diff も取れなくなります。デコードは名前付き実体参照(Web ページでよく現れる 200 余りを収録)、10進数の &#20013; と16進数の &#x4E2D; の両方に対応し、しかも1回だけ実行します:&amp;lt; は &lt; になり、< までは戻りません —— 繰り返しのデコードは XSS が入り込む典型的な経路だからです。知らない実体参照はそのまま残し、エラーも出さず消しもしません。

機能

  • 双方向変換:テキスト ⇄ HTML 実体参照
  • エンコードは構文上の意味を持つ < > & " とシングルクォートの 5 文字だけ。残りはそのまま
  • 任意で非 ASCII 文字を数値実体参照に変換:日本語 → &#26085;&#26412;&#35486;、emoji → &#128512;
  • デコードは名前付き実体参照に対応(nbsp、copy、mdash、矢印、数学記号、ギリシャ文字など 200 余り)
  • デコードは &#20013; の10進数と &#x4E2D; の16進数の両方に対応
  • デコードは1回だけ:&amp;lt; は < ではなく &lt; になります
  • 知らない実体参照や範囲外のコードポイントはそのまま保持し、エラーも出さず捨てもしません

使い方

  1. 方向を選びます:エンコードかデコード
  2. 日本語もまとめて数値実体参照にする場合は「非 ASCII 文字もエンコードする」にチェックを入れます
  3. 内容を入力欄に貼り付けると、結果がリアルタイムで表示されます
  4. 「コピー」で結果を取り出せます

よくある質問

エスケープするのが 5 文字だけなのはなぜですか?
HTML で構文上の意味を持つのは < > & " とシングルクォートだけだからです:タグがどこから始まり、属性値がどこで終わり、実体参照がどこから始まるかを決めます。それ以外の文字(日本語や中国語、emoji を含む)はリテラルのままで合法で、すべて実体参照にするとコードが読めなくなるだけです。全体を ASCII にしたい場合は「非 ASCII 文字もエンコードする」にチェックを入れてください。
シングルクォートが &apos; ではなく &#39; になるのはなぜですか?
&apos; は XML と HTML5 で追加された実体参照で、古いパーサーは認識しません。数値実体参照の &#39; はどのパーサーでもシングルクォートと等価なので、互換性の面で安定しています。
&amp;lt; が山括弧1つではなく &lt; に戻るのはなぜですか?
このツールはデコードを1回だけ行います。それが安全上正しい挙動です。繰り返しデコードすると &amp;lt;script&amp;gt; のような入力が、1回だけのフィルタをすり抜けてしまいます —— これが XSS の最も典型的な経路です。入れ子のデコードが必要な場合は、意図して明示的にもう一度かけてください。
一部の実体参照がデコードされないのはなぜですか?
このツールが収録しているのは Web ページでよく現れる 200 余りで、HTML5 の完全な 2200 余りは収録していません(ページサイズが十倍になります)。未収録の &foo; はそのまま残ります —— 処理されなかった実体参照が一目で分かり、エラーを受け取ったり黙って消されたりすることはありません。

関連ツール