htmlspecialchars

関数の概要

htmlspecialcharsは、PHPで文字列内の特定のHTML特殊文字をHTMLエンティティに変換する関数です。この関数を使うことで、ユーザーの入力内容を安全にHTMLに表示でき、クロスサイトスクリプティング(XSS)攻撃の防止に役立ちます。

パラメータの説明

  • string $string : エスケープしたい元の文字列を指定します。
  • int $flags(省略可能): 変換方法のフラグを指定します。例えば、ENT_QUOTESはシングルクォートとダブルクォートの両方を変換します。デフォルトは ENT_COMPAT(ダブルクォートのみ変換)です。
  • string|null $encoding(省略可能): 文字列のエンコーディングを指定します。省略した場合はデフォルトの内部文字セットが使われます。
  • bool $double_encode(省略可能): 既にエンティティに変換されている部分を再変換するかどうかを指定。デフォルトは true で再変換します。false にすると既存のエンティティはそのまま保持されます。

戻り値

HTMLエスケープが適用された文字列を返します。元の文字列は変更されません。

使用例

基本的な使い方

<?php
$text = '<a href="test">リンク</a>';
echo htmlspecialchars($text);
?>

この例では、文字列中の「<」や「>」、「”」がHTMLエンティティに変換され、安全に画面に表示されます。

シングルクォートもエスケープする場合

<?php
$text = "It's "dangerous" & risky";
echo htmlspecialchars($text, ENT_QUOTES);
?>

ENT_QUOTESを指定することで、シングルクォート(’)もエスケープされます。安全性が高まるため、ユーザー入力などにはこちらを使うことが推奨されます。

既にエスケープされている文字を再変換しない例

<?php
$text = 'Tom & Jerry <animation>';
echo htmlspecialchars($text, ENT_QUOTES, 'UTF-8', false);
?>

第4引数に false を指定すると、すでにエスケープされた部分(ここでは &)を再変換せず、重複してエンティティになるのを防げます。

関連する関数

  • htmlentities : もっと多くの文字をHTMLエンティティに変換する関数。
  • strip_tags : HTMLタグを取り除く関数。
  • htmlspecialchars_decode : htmlspecialcharsで変換した文字列を元に戻す関数。

まとめ

htmlspecialcharsはPHPでHTMLエスケープを行う基本的な関数であり、ユーザー入力をそのままHTMLに出力する際に必須の処理です。XSS攻撃対策として必ず活用しましょう。ENT_QUOTESオプションを使い、安全にすべての引用符を変換し、さらに用途に応じてdouble_encodeを制御することで、より柔軟で安全な表示が可能になります。実務でも大変役立つ知識ですので、ぜひ理解し活用してください。