HTMLでは、不等号<>やアンパサンドは特別な意味を持ちます。
通常、以下のようにエスケープしてHTML上に記述します。
| 文字 | エスケープ |
| < | < |
| > | > |
| & | & |
htmlspecialchars関数を使うと以下の文字がエスケープ(変換)されます。
| 文字 | エスケープ | 補足 |
| < | < | |
| > | > | |
| & | & | |
| " | " | フラグによりエスケープするしないを制御 |
| ' | ' | フラグによりエスケープするしないを制御 |
上記の文字がエスケープされることを確認するサンプルコードです。
<?php
echo 'htmlspecialchars("<") = ' . "\t" . htmlspecialchars("<") . PHP_EOL;
echo 'htmlspecialchars(">") = ' . "\t" . htmlspecialchars(">") . PHP_EOL;
echo 'htmlspecialchars("&") = ' . "\t" . htmlspecialchars("&") . PHP_EOL;
echo "htmlspecialchars('\"') = " . "\t" . htmlspecialchars('"') . PHP_EOL;
echo 'htmlspecialchars("\'") = ' . "\t" . htmlspecialchars("'") . PHP_EOL;
echo "htmlspecialchars('\"', ENT_NOQUOTES) = " . "\t" . htmlspecialchars('"', ENT_NOQUOTES) . PHP_EOL;
echo 'htmlspecialchars("\'", ENT_NOQUOTES) = ' . "\t" . htmlspecialchars("'", ENT_NOQUOTES) . PHP_EOL;
echo "htmlspecialchars('\"', ENT_QUOTES) = " . "\t" . htmlspecialchars('"', ENT_QUOTES) . PHP_EOL;
echo 'htmlspecialchars("\'", ENT_QUOTES) = ' . "\t" . htmlspecialchars("'", ENT_QUOTES) . PHP_EOL;
echo "htmlspecialchars('\"', ENT_COMPAT) = " . "\t" . htmlspecialchars('"', ENT_COMPAT) . PHP_EOL;
echo 'htmlspecialchars("\'", ENT_COMPAT) = ' . "\t" . htmlspecialchars("'", ENT_COMPAT) . PHP_EOL;
?>
上記スクリプトの実行結果を以下に記します。
尚、本スクリプトは端末から実行しました。
$ php htmlspecialchars.php
htmlspecialchars("<") = <
htmlspecialchars(">") = >
htmlspecialchars("&") = &
htmlspecialchars('"') = "
htmlspecialchars("'") = '
htmlspecialchars('"', ENT_NOQUOTES) = "
htmlspecialchars("'", ENT_NOQUOTES) = '
htmlspecialchars('"', ENT_QUOTES) = "
htmlspecialchars("'", ENT_QUOTES) = '
htmlspecialchars('"', ENT_COMPAT) = "
htmlspecialchars("'", ENT_COMPAT) = '
ENT_NOQUOTES, ENT_QUOTES, ENT_COMPATによる動作の違いも出力されています。