HTMLエスケープ/アンエスケープ
&・<・>・"・' などの特殊文字をHTMLエンティティに変換(エスケープ)、またはエンティティを元の文字に戻します(アンエスケープ)。XSS対策やHTML埋め込み時に便利です。
主要な名前付きHTMLエンティティ一覧
| 文字 | 名前付きエンティティ | 数値文字参照 | 説明 |
|---|---|---|---|
| & | & | & | アンパサンド("and"を表す記号) |
| < | < | < | 小なり記号(HTMLタグの開始文字と同じ) |
| > | > | > | 大なり記号(HTMLタグの終了文字と同じ) |
| " | " | " | ダブルクォート(属性値の区切り文字) |
| ' | ' | ' | シングルクォート(属性値の区切り文字) |
| |   | ノーブレークスペース(改行しない空白) | |
| © | © | © | 著作権記号 |
| ® | ® | ® | 登録商標記号 |
| ™ | ™ | ™ | 商標記号 |
| € | € | € | ユーロ記号 |
| ¥ | ¥ | ¥ | 円記号 |
| ¢ | ¢ | ¢ | セント記号 |
Tips
- HTMLエスケープはXSS(クロスサイトスクリプティング)対策の基本です。ユーザー入力をHTMLに埋め込む前に必ずエスケープしてください。
&は必ず最初にエスケープする必要があります。他の文字を先に変換すると、生成された&の&まで二重にエスケープされてしまいます。- 属性値に文字列を埋め込む場合は
"(ダブルクォート)だけでなく'(シングルクォート)もエスケープしておくと安全です。 - このツールは10進数値参照(
&)・16進数値参照(&)・主要な名前付きエンティティ(&等)のアンエスケープに対応しています。 - 多くのテンプレートエンジン(Blade・JSX・Vue等)は変数展開時に自動でHTMLエスケープしますが、
{!! !!}やv-htmlのような「生HTML出力」構文を使う場合は自分でエスケープする必要があります。
よくある質問
<・>・&の3文字はHTMLパーサーが構文の一部として解釈する特別な文字だからです。エスケープを怠るとブラウザがタグの開始・終了と誤認し、レイアウト崩壊やXSS(悪意あるスクリプトの埋め込み)につながる可能性があります。&・<・>・"・'の5文字のみをエスケープします。絵文字や日本語などの非ASCII文字は現代のUTF-8環境ではそのまま安全に表示できるため変換不要です。
余談ですが ― SGMLから受け継いだ「文字参照」という仕組み
HTMLエンティティ(文字参照)の起源は、HTMLの元になったSGML(Standard Generalized Markup Language)にまで遡ります。1986年に標準化されたSGMLは、既にタグの区切り文字である<を本文中で使うための「文字参照」という仕組みを持っていました。HTMLはこの仕組みをほぼそのまま継承し、1990年代のHTML初期仕様の時点で<・>・&といった基本的な名前付きエンティティが定義されていました。
名前付きエンティティは当初、印刷用の特殊記号(著作権記号©・登録商標®・各種ギリシャ文字など)を、当時普及していなかったUnicodeの代わりにASCII環境でも表示するための手段として重宝されました。HTML5仕様では最終的に2,000種類以上の名前付きエンティティが定義されており、チェックマークや音符記号のようなマイナーな記号まで網羅しています。
現代ではUTF-8エンコーディングの普及によって、文字化けを避けるための文字参照の必要性は大きく下がりました。しかし<・>・&という3文字だけは今でも別の理由でエスケープが必須です。これらはHTMLパーサーにとって構文上の特別な意味(タグの開始・終了・エンティティの開始)を持つため、エスケープを怠るとレイアウト崩壊やXSS脆弱性に直結します。