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]メソッドチェーン