PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのhtmlspecialchars()関数の使い方!特殊文字をHTMLエンティティへ変換する方法

htmlspecialchars() 関数は、PHPの組み込み関数の一つで、特殊文字をHTMLエンティティに変換するために使用されます。ユーザー入力をHTMLに出力する際のXSS(クロスサイトスクリプティング)対策として広く活用されている、非常に重要な関数です。

変換される特殊文字

この関数では、以下の定義済み文字が変換対象となります。

  • &(アンパサンド)→ &
  • "(ダブルクォート)→ "
  • '(シングルクォート)→ '
  • <(小なり記号)→ &lt;
  • >(大なり記号)→ &gt;

構文

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エンティティに変換された次のような文字列が出力されます。

&lt;a href=&#039;mylink&#039; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;Demo&lt;/strong&gt;&lt;/a&gt;

このように htmlspecialchars() を使うことで、HTMLとして解釈されるべきではない文字列を安全に表示でき、Webアプリケーションのセキュリティ向上に役立ちます。

  1. PHPのhtmlentities()関数とは?構文・パラメータ・使い方を徹底解説

    htmlentities()関数は、適用可能なすべての文字をHTMLエンティティに変換するための関数です。ユーザー入力を安全に表示したい場合や、HTMLタグをそのまま文字列として出力したい場合などに活用され、XSS(クロスサイトスクリプティング)対策としても重要な役割を果たします。構文htmlentities(str, flags, character-set, double_encode)パラメータstr − 変換対象となる文字列を指定します。flags − 引用符の扱い、無効なエンコーディングへの対応方法、および使用するドキュメントタイプを指定します。利用可能な引用スタイルは以下の通りです

  2. 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