HTMLエスケープ/アンエスケープ
HTML特殊文字(`< > & " '`)のエスケープ・アンエスケープをリアルタイム変換できる無料オンラインツール。XSS対策の基本、文字実体参照(`<`)と数値文字参照(`<`)の両形式対応、ワンクリックコピー機能付き。ブラウザ完結でサーバー送信なし、機密データも安全に処理できます。
HTML特殊文字(< > & " ')のエスケープ・アンエスケープをリアルタイム変換するツールです。XSS対策の基本処理として、ユーザー入力やAPIレスポンスを安全に表示するために必須の変換を即座に行えます。
&→&<→<>→>"→"'→'// HTMLエスケープ/アンエスケープの機能と特徴
XSS対策の重要性
クロスサイトスクリプティング(XSS)は、Webアプリケーションの脆弱性の中で最も一般的な攻撃の一つです。ユーザー入力をエスケープせずにHTMLに出力すると、攻撃者が悪意あるスクリプトを注入できてしまいます。HTMLエスケープはXSS対策の基本中の基本であり、ユーザー入力を表示する全ての箇所で実施する必要があります。
フレームワークの自動エスケープ
React、Vue、Angularなどのモダンなフレームワークは、デフォルトでHTMLエスケープを自動的に行います。ただし、dangerouslySetInnerHTML(React)やv-html(Vue)のようにエスケープを無効化するAPIも提供されており、これらを使用する際は入力のサニタイズを自分で行う必要があります。
エスケープが必要な5文字
HTMLで特別な意味を持つ5つの文字は `<`(<)、`>`(>)、`&`(&)、`"`(")、`'`(')です。`<` と `>` はタグの開始・終了、`&` は文字参照の開始、`"` と `'` は属性値の区切りとして解釈されるため、テキストとして表示する際はエスケープが必要です。
文字実体参照と数値文字参照
HTMLエンティティには2種類あります。文字実体参照(`<`・`&` など名前付き)は読みやすく、よく知られたエンティティに使われます。数値文字参照(`<` 10進 / `<` 16進)はあらゆるUnicode文字に対応し、絵文字や特殊記号にも使えます。本ツールは両形式での変換に対応しています。
// HTMLエスケープ/アンエスケープに関するよくある質問
- HTMLエスケープとは何ですか?
- HTMLエスケープとは、HTMLで特別な意味を持つ文字(`< > & " '`)を文字参照(`< > & " '`)に変換することです。これにより、HTMLタグや属性区切りとして解釈されることを防ぎ、テキストとして安全に表示できます。XSS(クロスサイトスクリプティング)攻撃を防ぐWebセキュリティの基本処理です。
- なぜHTMLエスケープが必要ですか?
- HTMLエスケープを行わないと、ユーザー入力がHTMLタグとして解釈され、`<script>alert(1)</script>` のようなコードがブラウザで実行されてしまいXSS攻撃の原因になります。Cookieの窃取、なりすまし、フィッシングなど深刻な被害につながるため、ユーザー入力・APIレスポンス・データベースの値を表示する際は必ずエスケープが必要です。
- アンエスケープはどのような場面で使いますか?
- アンエスケープは、エスケープ済みのHTMLソースコードを元のテキストに戻す際に使います。例えば、APIレスポンスやデータベースから二重エスケープ状態(`&lt;` のように)で取得した場合の修正、メールクライアントが自動エスケープした文字列の復元、HTMLからプレーンテキストへの変換などに利用します。
- 数値文字参照と文字実体参照の違いは何ですか?
- 数値文字参照(`<` や `<`)は文字のコードポイント(10進または16進)で指定する方法、文字実体参照(`<`)は名前で指定する方法です。どちらも同じ文字を表しますが、文字実体参照の方が読みやすく広く使われています。一方、絵文字や特殊なUnicode文字は名前付きエンティティが定義されていない場合があり、その場合は数値文字参照を使います。
- シングルクォート(')は `'` でエスケープできる?
- HTML5では `'` が定義されていますが、HTML4 では未定義のため互換性を考慮して `'` を使うのが安全です。本ツールは互換性を優先して `'` でエスケープします。XMLでは `'` が標準なので、XMLファイル生成時には適切な方を選んでください。
- 属性値の中とテキストの中でエスケープすべき文字は違いますか?
- テキストノード内では `< > &`、属性値内ではこれに加えて区切り記号(`"` または `'`)をエスケープする必要があります。本ツールは保守的にすべての5文字をエスケープするため、属性値・テキストどちらの用途でも安全です。
- 既にエスケープ済みの文字列を再エスケープしたら?
- 二重エスケープになり、`<` が `&lt;` に変換され、表示時には文字通り `<` と見えます。意図しない表示崩れの原因になるため、エスケープ前に文字列が既にエスケープ済みでないか確認するロジック、またはアンエスケープ→再エスケープのフローを設計する必要があります。
- JavaScript で同じことを行うには?
- ライブラリを使わない簡易実装は ``str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''')`` のように5文字を順次置換します(`&` を最初に処理するのが重要)。Node.js では `he` パッケージ、ブラウザでは DOMParser を使った方法も一般的です。本ツールでサンプル変換を確認してから実装するのが便利です。
- 絵文字や日本語もエスケープすべき?
- 絵文字・日本語・中国語などのUnicode文字はHTML的に特別な意味を持たないため、通常はエスケープ不要でそのまま表示できます(UTF-8で正しく配信されている前提)。`😀` のような数値文字参照に変換することも可能ですが、ファイルサイズが増えるだけで利点はありません。
- データはサーバーに送信されますか?
- いいえ、すべての処理はブラウザ内のJavaScriptで完結します。入力したテキスト・エスケープ結果は外部に送信されません。社内システムのテンプレート文字列・ユーザー個人情報・コードレビュー対象の機密データも安全にエスケープ/アンエスケープできます。
// HTMLエスケープ/アンエスケープの使い方
-
テキストを入力
入力欄にエスケープまたはアンエスケープしたいテキストを貼り付けます。HTML本文・属性値・APIレスポンス・テンプレート文字列・データベース値など、任意の文字列に対応します。
-
モードを選択
エスケープ(特殊文字→文字参照)またはアンエスケープ(文字参照→特殊文字)モードを選択します。場合によっては数値文字参照と文字実体参照のいずれかを切り替えることもあります。
-
結果をコピー
リアルタイムで変換結果が表示されます。COPYボタンでクリップボードにコピーし、HTMLテンプレート・JSXコード・APIレスポンス・データベース挿入値などに貼り付けてください。
カテゴリ エンコード