PHP htmlspecialchars() 関数

❮ PHP 文字列リファレンス

定義済みの文字 "<"(より小)および ">"(より大)を HTMLエンティティに変換します:

<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
?>

上のコードのHTML出力は次の通り(ソース表示):

<!DOCTYPE html>
<html>
<body>
This is some &lt;b&gt;bold&lt;/b&gt; text.
</body>
</html>

ブラウザへの上のコードの出力は、次の通り:

This is some <b>bold</b> text.
例の実行 »

定義と用法

htmlspecialchars() f関数は、定義済みの文字をHTMLエンティティに変換します。

定義済みの文字は以下の通りです:

チップ: 特殊なHTMLエンティティを文字に変換するには、 htmlspecialchars_decode()関数を使用します。


構文

htmlspecialchars(string,flags,character-set,double_encode)

パラメータ 説明
string 必須。変換する文字列を指定する
flags 任意。クォート、無効なエンコーディング、および使用する文書タイプの処理方法を指定する。

使用可能なクォートスタイルは次の通り:

  • ENT_COMPAT - デフォルト。ダブルクォートのみをエンコードする
  • ENT_QUOTES - ダブルクォート、シングルクォートの両方をエンコードする
  • ENT_NOQUOTES - どのクォートもエンコードしない

無効なエンコード:

  • ENT_IGNORE - 空の文字列を返す代わりに無効なエンコーディングを無視する。セキュリティに影響を与える可能性があるため、使用を回避すること
  • ENT_SUBSTITUTE - 無効な符号単位シーケンスを含む文字列を渡したときに、 空の文字列を返すのではなく Unicode の置換文字に置き換える。 UTF-8 の場合は U+FFFD、それ以外の場合は &#FFFD; となる
  • ENT_DISALLOWED - 指定した文書型において無効な符号位置を、Unicode の代替文字である U+FFFD (UTF-8) あるいは &#FFFD; で置き換える

使用する文書タイプを指定する追加のフラグ:

  • ENT_HTML401 - デフォルト。コードを HTML 4.01 として処理する/li>
  • ENT_HTML5 - コードを HTML 5 として処理する/li>
  • ENT_XML1 - コードを XML 1 として処理する/li>
  • ENT_XHTML - コードを XHTML として処理する/li>
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 OS で使われる文字セット

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

double_encode 任意。既存のHTMLエンティティをエンコードするかどうかを指定するブール値
  • TRUE - デフォルト。すべてを変換する
  • FALSE - 既存のhtmlエンティティはエンコードしない

技術内容
返り値: 変換した文字列を返します

NT_IGNOREフラグまたはENT_SUBSTITUTEフラグがセットされていない場合、文字列に無効なエンコーディングが含まれていると空の文字列を返します。
PHP バージョン: 4+
変更歴 character-set パラメータのデフォルト値は、PHP 5でUTF-8に変更されました

ENT_SUBSTITUTE、ENT_DISALLOWED、ENT_HTML401、ENT_HTML5、ENT_XML1 と ENT_XHTML は PHP 5.4 で追加されました

ENT_IGNORE は PHP 5.3 で追加されました

double_encode パラメータは PHP 5.2.3 で追加されました

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

その他の例

例 1

定義済みの文字をHTMLエンティティに変換します:

<?php
$str = "Jane & 'Tarzan'";
echo htmlspecialchars($str, ENT_COMPAT); // Will only convert double quotes
echo "<br>";
echo htmlspecialchars($str, ENT_QUOTES); // Converts double and single quotes
echo "<br>";
echo htmlspecialchars($str, ENT_NOQUOTES); // Does not convert any quotes
?>

上のコードのHTML出力は次の通り(ソース表示):

<!DOCTYPE html>
<html>
<body>
Jane &amp; 'Tarzan'<br>
Jane &amp; &#039;Tarzan&#039;<br>
Jane &amp; 'Tarzan'
</body>
</html>

ブラウザへの上のコードの出力は、次の通り:

Jane & 'Tarzan'
Jane & 'Tarzan'
Jane & 'Tarzan'
例の実行 »

例 2

ダブルクォートをHTMLエンティティに変換します:

<?php
$str = 'I love "PHP".';
echo htmlspecialchars($str, ENT_QUOTES); // Converts double and single quotes
?>

上のコードのHTML出力は次の通り(ソース表示):

<!DOCTYPE html>
<html>
<body>
I love &quot;PHP&quot;.
</body>
</html>

ブラウザへの上のコードの出力は、次の通り:

I love "PHP".
例の実行 »

❮ PHP 文字列リファレンス