htmlspecialchars() - 特殊な文字だけをHTMLエンティティに変換する
公開日:
htmlspecialchars
は、例えばタグとして利用される<
、>
など、HTMLにおいて特殊な意味を持つ文字だけを対象に、HTMLエンティティに変換する関数です。
構文
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )
パラメータ
$string
対象の文字列。
$flags
初期値: ENT_COMPAT | ENT_HTML401
変換する特殊文字の種類。
- ENT_COMPAT
- ダブルクォートを含め、シングルクォートを含めない。
- ENT_QUOTES
- シングルクォート、ダブルクォートのどちらも含める。
- ENT_NOQUOTES
- ダブルクォート、シングルクォートのどちらも含めない。
- ENT_IGNORE
- 無効な符号単位シーケンスが含まれる時、 空の文字列を返すのではなく無効な部分を切り捨てる。
- ENT_SUBSTITUTE
- 無効な符号単位シーケンスが含まれる時、 空の文字列を返すのではなUnicodeの代替文字に置換する。UTF-8の場合は
U+FFFD
、それ以外の場合はFFFD;
となる。 - ENT_DISALLOWED
- 指定した文書型において無効な符号位置を、Unicodeの代替文字に置換する。UTF-8の場合は
U+FFFD
、それ以外の場合はFFFD;
となる。 - ENT_HTML401
- HTML4.01のドキュメントに適したテーブル。
- ENT_XML1
- XML1のドキュメントに適したテーブル。
- ENT_XHTML
- XHTMLのドキュメントに適したテーブル。
- ENT_HTML5
- HTML5のドキュメントに適したテーブル。
$encoding
初期値: ini_get ("default_charset")
使用する文字エンコーディング。
$double_encode
初期値: true
既存のHTMLエンティティを、重ねて変換するか?
返り値
string
HTMLエンティティに変換した文字列。
サンプルコード
HTMLエンティティに変換する
htmlentities()とは違って、HTMLにおいて特殊な意味を持つ文字だけを対象に、HTMLエンティティに変換します。例えば下記の場合、©
は変換対象になりません。
php
<?php
// 文字列
$str = '<b>"©SYNCER"</b>' ;
// 実行
$result = htmlspecialchars( $str ) ;
// 結果
var_dump( $result ) ;
結果 (出力内容) - PHP7.0.21
string(39) "<b>"©SYNCER"</b>"
変換フラグを指定する
第2引数に定数を指定すれば、変換方法を調整できます。例えば、ENT_NOQUOTES
を指定すると、シングルクォート、ダブルクォートは変換の対象になりません。
php
<?php
// 文字列
$str = '<b>"©SYNCER"</b>' ;
// 実行
$result = htmlspecialchars( $str, ENT_NOQUOTES ) ;
// 結果
var_dump( $result ) ;
結果 (出力内容) - PHP7.0.21
string(29) "<b>"©SYNCER"</b>"
重ねての変換を拒否する
通常、&
のエンティティである&
を変換にかけると、当然、&amp;
というように重ねて変換されてしまいます。第4引数にfalse
を指定することで、この重ねての変換を拒否できます。
php
<?php
// 文字列
$str = '&' ;
// 実行
$result = htmlspecialchars( $str, ENT_NOQUOTES, "UTF-8", false ) ;
// 結果
var_dump( $result ) ;
結果 (出力内容) - PHP7.0.21
string(5) "&"
サンドボックス
ソースコードを編集してhtmlspecialchars()
の挙動を確認して下さい。
参考リンク
- PHP - 公式マニュアル。