BookmarkLINEアジェンダhtmlentitieshtmlspecialchars共通オプションフラグ定数(第二引数オプション)エンコーディング(第三引数オプション)既存のhtmlエンティティ取扱い(第四引数オプション)htmlentities関数とhtmlspecialchars関数の違いデフォルト処理シングルクォーテーションも変換対象に含むエンティティ変換をデコードするget_html_translation_table()HTMLに用いられる文字列には「特殊文字」と呼ばれるものがあります。代表的なものは「<」大なりや「>」小なり、「”」ダブルクオートや「’」シングルクオート、そして「&」アンパサンドなどの一般的な記号がありますが、他にも、数学記号やギリシャ文字など、OSやWebブラウザの種類によっては正しく表示できないものもこれに当たります。特殊文字をHTML上に展開する場合、そのまま出力すると文字化けを起こしたりHTML構造が壊れたりしてしまう場合があるので、適宜エンティティ変換を行う事が推奨されます。ENT_HTML401)$encodingエンコーディング(デフォルト:ini_get("default_charset"))$double_encode既存のhtmlエンティティ取扱い(デフォルト:TRUE)[公式]htmlspecialcharshttp://php.net/manual/ja/function.htmlspecialchars.php共通オプションhtmlentities関数とhtmlspecialchars関数の引数項目は全て共通になっています。設定しない場合は無効な符号位置をそのまま残す。外部コンテンツを埋め込んだXML文書を整形式に保つために有効。5エンコーディング(第三引数オプション)エンコーディングは、セットしない場合デフォルトでphp.iniのdefault_charsetで設定されている文字セットが適用されます。(設定値は公式ページを参照してください。)既存のhtmlエンティティ取扱い(第四引数オプション)このオプションは、エンティティ変換に二重処理を防止する為のオプションで、デフォルトではON(true)に設定されています。エンティティ変換が行われているものについては変換処理を行わない為の設定です。このオプションをOFF(false)に設定した場合、重ねてエンティティ変換が行われると以下のようになります。して成立しなくなります。htmlentities関数とhtmlspecialchars関数の違い結論から言うと、両者の違いは「エンティティ変換として取り扱う対象の違い」です。htmlspecialchars()で変換対象となる文字は以下になります。」HTMLタグなどコードの一部として機能するものが変換対象となっています。htmlentities()に関しては、エンティティ変換可能なもの全てが変換対象となっています。(こちらもオプションによって変動があります)以下に、両者の処理の違いを示しますが、まず前提として、変換対象として渡すテキストは以下のようになっています。';わかりやすいように、ひらがな・漢字、そして「」が全角で、あとは全て半角です。シングルクオーテーションのみ、変数への代入の関係でエスケープシーケンスで記述しています。デフォルト処理オプションは設定せず、デフォルトでの変換の場合です。htmlentities()の方はシングルクォーテーション以外は記号も含め根こそぎエンティティ変換されているのに対し、htmlspecialchars()の方は対象文字以外は変換されていないことが確認できます。シングルクォーテーションも変換対象に含む次は、第二引数を指定してシングルクォーテーションも変換対象に含みます。「ENT_QUOTES」を指定する事で、両者ともシングルクォーテーションも変換された事が確認できます。第二引数は複数指定する事も可能です。その場合は「|(パイプライン)」で区切ります。エンティティ変換をデコードする一度エンティティ変換を行ったものに対して、デコード(もとに戻す)事も出来ます。それぞれ、デコード用関数が用意されており、htmlentities()の場合はhtml_entity_decode()を、htmlspecialchars()の場合はhtmlspecialchars_decode()を用います。デコードは両者ともエンティティ変換前の文字列に戻っている事が確認できます。ポイントは、デコードの際に、エンティティ変換を行った時と同じオプション(フラグ定数)を指定する事です。する事で、フラグ定数指示に則ってデコードが行われます。get_html_translation_table()おまけですが、デコード用関数を使わなくても手動で戻す事も可能です。PHPにはget_html_translation_table()という関数があり、これを用いる事でhtmlspecialchars()やhtmlentities()で使用される変換テーブルを取得する事が出来るので、これを利用する事で手動でデコードが可能です。get_html_translation_table関数の第一引数には変換テーブル指定の為の定数が渡されており、必要に応じてフラグ定数を第二引数に渡す事で、こちらの要求する変換テーブルセットを配列で取得する事が出来ます。htmlentitiesの変換テーブルは多いので割愛しますが、htmlspecialcharsの変換テーブルは、例えば以下のようになっています。)まとめ昨今ではPHPフレームワークの進化でこれらの関数を直接的に使用する機会はかなり減りました。いえ、Laravelなどで使われているBladeテンプレートの{{}}記法やeヘルパーなどではhtmlspecialcharsやhtmlentitiesが使われており、レガシーながらも現在でも必要不可欠な関数である事には間違いありません。両者の違いを理解できると、使いどころも迷わずにチョイスできるようになるので、覚えておくとどこかできっと役に立つはずです。イベントレポート2019.12.8MySQL8.0.16で追加されたCHECK制約を試してみる。2019.12.2LaravelのContracts(契約)とは。SESを使ってAPIメール送信を行う(Mailableクラス&SimpleEmailService)2019.12.3MySQL8.0.16で追加されたCHECK制約を試してみる。RitoLaboこのサイトについて利用規約プライバシーポリシ。