PHP htmlspecialchars() 関数

事前定義された文字「<」(小さい)と「>」(大きい)を HTML 実体に変換します:

<?php
$str = "これは <b>太字</b> テキストの例です.";
echo htmlspecialchars($str);
?>

以下のコードの HTML 出力は以下の通りです(ソースコードを確認):

<!DOCTYPE html>
<html>
<body>
これは <b>太字</b> テキストの例です。
</body>
</html>

以下のコードのブラウザ出力:

これは <b>太字</b> テキストの例です。

実行例

定義と使用法

htmlspecialchars() 関数は、事前定義された文字を HTML 実体に変換します。

事前定義された文字は:

  • & (和号)を '&' に置換します。
  • " (双重引用符)を '" に置換します。
  • ' (単独引用符)を ''' に置換します。
  • < (小さい)を '<' に置換します。
  • > (大きい)を '>' に置換します。

ヒント:特殊な HTML 実体を文字に戻す場合は、以下を使用してください。 htmlspecialchars_decode() 関数。

構文

htmlspecialchars(string,flags,character-set,double_encode)
パラメータ 説明
string 必須。変換する文字列を指定します。
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

オプション。使用する文字セットを指定する文字列。

許可される値:

  • UTF-8 - デフォルト。ASCII と互換性のある多バイトの 8 ビット Unicode
  • ISO-8859-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 オペレーティングシステムで使用される文字セット

注釈:PHP 5.4 より前のバージョンでは、認識できない文字セットは ISO-8859-1 で置き換えられます。PHP 5.4 以降では、認識できない文字セットは UTF-8 で置き換えられます。

double_encode

オプション。既存の HTML エンティティをエンコードするかどうかを指定する布尔値。

  • TRUE - デフォルト。各エンティティを変換します。
  • FALSE - 既存の HTML エンティティをエンコードしません。

技術的詳細

返り値:

変換された文字列を返します。

もし、 string 無効なエンコーディングが含まれている場合、ENT_IGNORE または ENT_SUBSTITUTE フラグが設定されていない限り、空の文字列が返されます。

PHP バージョン: 4+
更新履歴:

PHP 5 では、character-set パラメータのデフォルト値が UTF-8 に変更されました。

PHP 5.4 で、ENT_SUBSTITUTE、ENT_DISALLOWED、ENT_HTML401、ENT_HTML5、ENT_XML1 および ENT_XHTML が追加されました。

PHP 5.3 で、ENT_IGNORE が追加されました。

PHP 5.2.3 で、新機能が追加されました。 double_encode パラメータ。

PHP 4.1 で追加されました character-set パラメータ。

さらに例

例 1

いくつかの事前定義された文字を HTML エスケープシーケンスに変換:

<?php
$str = "Bill & 'Steve'";
echo htmlspecialchars($str, ENT_COMPAT); // ダブルクォートのみ変換
echo "<br>";
echo htmlspecialchars($str, ENT_QUOTES); // ダブルクォートとシングルクォートの変換
echo "<br>";
echo htmlspecialchars($str, ENT_NOQUOTES); // いかなるクォートも変換しない
?>

以下のコードの HTML 出力は以下の通りです(ソースコードを確認):

<!DOCTYPE html>
<html>
<body>
Bill & 'Steve'<br>
Bill & 'Steve'<br>
Bill & 'Steve'
</body>
</html>

以下のコードのブラウザ出力:

Bill & 'Steve'
Bill & 'Steve'
Bill & 'Steve'

実行例

例 2

ダブルクォートを HTML エスケープシーケンスに変換:

<?php
$str = 'I love "PHP".';
echo htmlspecialchars($str, ENT_QUOTES); // ダブルクォートとシングルクォートの変換
?>

以下のコードの HTML 出力は以下の通りです(ソースコードを確認):

<!DOCTYPE html>
<html>
<body>
I love "PHP".
</body>
</html>

以下のコードのブラウザ出力:

I love "PHP".

実行例