====== PHP 簡易的なテンプレートエンジンその2 ====== 外部テンプレートファイルを読み込み、テンプレート中の専用タグと同じ名前を持った配列を内容を出力する簡易的なテンプレートエンジンです。(テンプレートエンジンなどと言っていますが配列を展開してるだけで特殊な機能はありません) テンプレートはテキストとして読み込んでpreg_replaceで文字置換しているので処理速度は低速でPHP構文も使えません。しかしテンプレート中でPHPが使えないのでPHP構文エラーによるトラブルはありません。 2018/12/31 PHP7用のコード追加 ----- イメージ ^テンプレート(専用タグ)^+^データ(php)^ |

{{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}}%%''タグを設置して下さい。