PHPのhtmlspecialchars()関数の使い方!特殊文字をHTMLエンティティへ変換する方法
htmlspecialchars() 関数は、PHPの組み込み関数の一つで、特殊文字をHTMLエンティティに変換するために使用されます。ユーザー入力をHTMLに出力する際のXSS(クロスサイトスクリプティング)対策として広く活用されている、非常に重要な関数です。
変換される特殊文字
この関数では、以下の定義済み文字が変換対象となります。
&(アンパサンド)→&"(ダブルクォート)→"'(シングルクォート)→'<(小なり記号)→<>(大なり記号)→>
構文
htmlspecialchars(str, flags, character-set, double_encode)
パラメータ
str − 変換対象となる文字列を指定します。
flags − 引用符の扱い方、無効なエンコーディングの処理方法、および使用するドキュメントタイプを指定します。
引用符のスタイル
ENT_COMPAT − デフォルト。ダブルクォートのみを変換します。
ENT_QUOTES − ダブルクォートとシングルクォートの両方を変換します。
ENT_NOQUOTES − 引用符を一切変換しません。
無効なエンコーディングへの対応
ENT_IGNORE − 無効なエンコーディングを無視し、空文字列を返さずに処理を続けます。セキュリティ上の問題につながる可能性があるため、使用は推奨されません。
ENT_SUBSTITUTE − 無効なエンコーディングを、空文字列を返す代わりにUnicode置換文字 U+FFFD(UTF-8の場合)または
&#FFFD;に置き換えます。ENT_DISALLOWED − 指定したドキュメントタイプで無効なコードポイントを、Unicode置換文字 U+FFFD(UTF-8の場合)または
&#FFFD;に置き換えます。
ドキュメントタイプの指定フラグ
ENT_HTML401 − デフォルト。コードをHTML 4.01として処理します。
ENT_HTML5 − コードをHTML 5として処理します。
ENT_XML1 − コードをXML 1として処理します。
ENT_XHTML − コードをXHTMLとして処理します。
character-set − 使用する文字エンコーディングを指定します。省略した場合は、php.ini の default_charset 設定値が適用されます。
指定可能な文字セット
UTF-8 − デフォルト。ASCII互換のマルチバイト8ビットUnicodeエンコーディング。
ISO-8859-1 − 西ヨーロッパ言語(Latin-1)。
ISO-8859-15 − 西ヨーロッパ言語(ISO-8859-1にユーロ記号およびフランス語・フィンランド語の欠落文字を追加)。
cp866 − DOS専用のキリル文字セット。
cp1251 − Windows専用のキリル文字セット。
cp1252 − Windows専用の西ヨーロッパ言語文字セット。
KOI8-R − ロシア語。
BIG5 − 繁体字中国語(主に台湾で使用)。
GB2312 − 簡体字中国語(中国の国家標準文字セット)。
BIG5-HKSCS − Big5に香港拡張を加えたもの。
Shift_JIS − 日本語。
EUC-JP − 日本語。
MacRoman − 旧Mac OSで使用されていた文字セット。
double_encode − 既存のHTMLエンティティをさらにエンコードするかどうかを指定するブール値です。
true − デフォルト。既存のHTMLエンティティも含めてすべて変換します。
false − 既存のHTMLエンティティは変換せず、そのまま保持します。
戻り値
htmlspecialchars() 関数は、変換後の文字列を返します。入力文字列に無効なエンコーディングが含まれており、ENT_IGNORE または ENT_SUBSTITUTE フラグが指定されていない場合は、空文字列が返される点に注意してください。
使用例
以下は、実際のコード例です。
<?php
$res = htmlspecialchars("<a href='mylink' rel=\"nofollow\"><strong>Demo</strong></a>", ENT_QUOTES);
echo $res;
?>
出力結果
上記のコードを実行すると、タグや引用符がすべてHTMLエンティティに変換された次のような文字列が出力されます。
<a href='mylink' rel="nofollow"><strong>Demo</strong></a>
このように htmlspecialchars() を使うことで、HTMLとして解釈されるべきではない文字列を安全に表示でき、Webアプリケーションのセキュリティ向上に役立ちます。
-
PHPのhtmlentities()関数とは?構文・パラメータ・使い方を徹底解説
htmlentities()関数は、適用可能なすべての文字をHTMLエンティティに変換するための関数です。ユーザー入力を安全に表示したい場合や、HTMLタグをそのまま文字列として出力したい場合などに活用され、XSS(クロスサイトスクリプティング)対策としても重要な役割を果たします。構文htmlentities(str, flags, character-set, double_encode)パラメータstr − 変換対象となる文字列を指定します。flags − 引用符の扱い、無効なエンコーディングへの対応方法、および使用するドキュメントタイプを指定します。利用可能な引用スタイルは以下の通りです
-
PHPのfgetss()関数とは?使い方と実行例をわかりやすく解説
fgetss()関数とはfgetss()関数は、ファイルポインタから1行を読み込み、その行に含まれるHTMLタグおよびPHPタグを自動的に除去する関数です。handleが指すファイルから最大「length - 1」バイト分の文字列を読み取り、HTMLやPHPのコードをすべて取り除いた状態で返します。エラーが発生した場合はFALSEを返します。なお、fgetss()はPHP 7.3.0で非推奨となり、PHP 8.0.0で削除されました。現在の環境では、fgets()とstrip_tags()を組み合わせて使用することが推奨されています。構文fgetss(file_path, length, ta