Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
htmlspecialchars() / htmlentities()対応: PHP 4(2000)
HTML の特殊文字をエスケープしてXSS攻撃を防止します。ユーザー入力を画面に表示する際には必ず使用してください。
構文
// HTMLの特殊文字をエスケープします。 htmlspecialchars($string, $flags, $encoding, $double_encode); // すべてのHTML文字実体をエスケープします。 htmlentities($string, $flags, $encoding, $double_encode); // HTML文字実体を元の文字に戻します。 html_entity_decode($string, $flags, $encoding); // HTMLタグを除去します。 strip_tags($string, $allowed_tags);
関数一覧
| 関数 | 概要 |
|---|---|
| htmlspecialchars($string, $flags, $encoding) | 『&』『"』『'』『<』『>』の5文字をHTML文字実体に変換します。XSS対策として最も基本的な関数です。 |
| htmlentities($string, $flags, $encoding) | HTMLの文字実体が定義されているすべての文字を変換します。『htmlspecialchars()』より変換範囲が広くなります。 |
| html_entity_decode($string, $flags, $encoding) | HTML文字実体を元の文字に戻す逆変換関数です。『htmlspecialchars()』や『htmlentities()』の逆の処理を行います。 |
| strip_tags($string, $allowed_tags) | 文字列からHTMLタグを除去します。第2引数で許可するタグを指定できます。 |
戻り値
変換後の文字列を返します。元の文字列は変更されません。
サンプルコード
<?php
// XSS攻撃を防ぐ基本的な使い方です。
$user_input = '<script>alert("XSS")</script>';
echo htmlspecialchars($user_input, ENT_QUOTES, "UTF-8"); // タグがエスケープされて安全に表示されます。
// 変換される5つの文字です。
$str = '& " \' < >';
echo htmlspecialchars($str, ENT_QUOTES, "UTF-8"); // 『& " ' < >』と出力されます。
// フォーム入力値の安全な表示に活用する例です。
$name = '山田<b>太郎</b>';
echo '<p>' . htmlspecialchars($name, ENT_QUOTES, "UTF-8") . '</p>'; // タグが無効化された安全なHTMLが出力されます。
// htmlentities() はより広い範囲の文字を変換します。
echo htmlentities("© 2026", ENT_QUOTES, "UTF-8"); // 著作権記号も文字実体に変換されます。
// html_entity_decode() で元の文字に戻します。
$encoded = "<p>テスト</p>";
echo html_entity_decode($encoded, ENT_QUOTES, "UTF-8"); // 『<p>テスト</p>』と出力されます。
// strip_tags() でHTMLタグを除去します。
$html = "<p>これは<b>太字</b>の<a href='#'>リンク</a>です。</p>";
echo strip_tags($html); // 『これは太字のリンクです。』と出力されます。
// 第2引数で許可するタグを指定できます。
echo strip_tags($html, "<b><p>"); // 『<p>これは<b>太字</b>のリンクです。</p>』と出力されます。
// ENT_QUOTES フラグの重要性を示す例です。
$value = '" onmouseover="alert(1)';
echo '<input value="' . htmlspecialchars($value, ENT_QUOTES, "UTF-8") . '">'; // ダブルクォートもエスケープされます。
概要
『htmlspecialchars()』はXSS対策の基本となる関数で、ユーザー入力をHTMLに出力する際には必ず使用してください。第2引数には必ず ENT_QUOTES を指定してください。省略するとシングルクォートがエスケープされず、HTML属性値の中でXSS攻撃が成立する恐れがあります。第3引数のエンコーディングも "UTF-8" を明示的に指定することを推奨します。
『htmlentities()』は『htmlspecialchars()』より広い範囲の文字を変換しますが、通常のXSS対策には『htmlspecialchars()』で十分です。『html_entity_decode()』は逆変換を行い、データベースに保存されたエスケープ済みのデータを元に戻す場合などに使用します。
『strip_tags()』はHTMLタグを丸ごと除去する関数で、プレーンテキストが必要な場面に便利です。ただしXSS対策としては不完全なため、画面出力時は『htmlspecialchars()』を使用してください。URLのエンコードには『urlencode()』を使用します。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。