PHP で html を出力するする際、htmlspecialchars() を使ってクロスサイトスクリプティング(XSS)対策を行うのは基本的ですが、printf() や sprintf() で出力をする場合全ての値に htmlspecialchars() を行うと可読性が著しく下がってしまうので、特殊文字を変換した上で printf()、sprintf() をするための関数を作ってみました。
<?php printfh('<a href="%s" class="%s">%s</a>', 'https://php-archive.net','sample', '<test>'); function printfh(){ $args = func_get_args(); $text = array_shift($args); $args = array_map('h', $args); vprintf($text, $args); } function sprintfh(){ $args = func_get_args(); $text = array_shift($args); $args = array_map('h', $args); return vsprintf($text, $args); } function h($str, $encoding=null){ if(empty($encoding)) $encoding = mb_internal_encoding(); $str = htmlspecialchars($str, ENT_QUOTES, $encoding); return $str; }
実行結果: <a href="https://php-archive.net" class="sample"><test></a>
使い方は printf() などとほぼ同じです。
第一引数にフォーマットを記入し、第二引数以降に代入する文字を追加していきます。(可変長引数)
Similar Posts:
- [PHP]htmlspecialchars()を使うと文字が消える?
- [PHP]ヒアドキュメント内で関数を使う
- [PHP]携帯サイト向けに文字コードを一括変換する
- [PHP]クラスメソッドをキャメルケース、スネークケースのどちらでも呼び出せるようにする
- [PHP]料金表のようなものをテキストだけで表現する
- [PHP]最低限覚えておきたい必須関数一覧
- [PHP]クラスにメソッドを動的に追加する
- [PHP]メソッドチェーン