{{title}}
{{text}}
|+|$datas{'title'}='デモ';
$datas{'text'}='Hello world!'
|
^ ↓結果 ^
|デモ
Hello world!
|
「その2」となっていますが[[php_template|前回]]とはコンセプトが違い、できるだけ特殊な機能は一切含まずシンプルに入力されたデータを出力するようにしましたので関数本体はたった3行だけです。
function template_engin2($data,$array){
return preg_replace_callback('/\{\{(.*?)\}\}/',function($match)use($array){return $array[$match[1]];}, $data);
}
※PHP5.xなど上記が動作しない場合は下記を使用
function template_engin2($data,$array){
return preg_replace('/\{\{(.*?)\}\}/e','$array[\'$1\']' , $data);
}
===== サンプル =====
phpの実行できる環境で、次のPHP(template2.php)とテンプレート部(template2.html)をダウンロードし、同じディレクトリに置いてphpを実行して下さい。
Google';
//テンプレート関数実行
echo template_engin2($temp_body,$temp_datas);
{{title}}
{{title}}
日付:{{data}}
通常文書:{{text}}
HTML文書:{{html}}
未使用キーは除去:{{hogehoge}}
==== 注意点 ====
1.外部ユーザーが操作できるデータを挿入する時は、配列に代入する時にxss対策を行って下さい。xss対策で無害化しないと悪意のあるスプリクトなどが設置可能になります。(上記例では$temp_array['html']以外はhtmlspecialchars関数にて最低限の無害化はしてありますが、scriptタグの内側やHTMLタグ属性などに専用タグを設置する場合は別途javascript等を無効化する対策が必要です)
2.テンプレート本体の ''%%{{文字列}}%%'' は除去されます。表示したい場合は「''{''→''{''」「''}''→''}''」にエスケープして疑似的に表示するか、カッコを直接出力したい場合はテンプレートのデータに「''%%$temp_datas['left_tag']='{';%%''」「''%%$temp_datas['right_tag']='{';%%''」のように登録し、テンプレート本体側に''%%{{left_tag}}%%''・''%%{{right_tag}}%%''タグを設置して下さい。