60行で作るPHP用テンプレートエンジン
Smarty でいいじゃん、という突っ込みはともかく、Dan さんがハッシュとのコンボとか書かれてたけど、PHP の preg_replace は複数のパターンを受け付けたりするのだよな。
だから、
function convert_string($s) { $s = preg_replace('/^<\?xml/', '<<?php ?>?xml', $s); $s = preg_replace('/#\{(.*?)\}/', '<?php echo $1; ?>', $s); $s = preg_replace('/%\{(.*?)\}/', '<?php echo htmlspecialchars($1); ?>', $s); return $s; }
は
function convert_string($str) { $patterns = array( '/^<\?xml' => '<<?php ?>?xml', '/#\{(.*?)\}/' => '<?php echo $1; ?>', '/%\{(.*?)\}/' => '<?php echo htmlspecialchars($1); ?>', ); return preg_replace(array_keys($patterns), array_values($patterns), $str); }
と書けたりする。ま、本当のところをいうと htmlspecialchars には ENT_QUOTES を指定したほうがいいから、以下のが良い。
function convert_string($str) { $patterns = array( '/^<\?xml' => '<<?php ?>?xml', '/#\{(.*?)\}/' => '<?php echo $1; ?>', '/%\{(.*?)\}/' => '<?php echo htmlspecialchars($1, ENT_QUOTES); ?>', ); return preg_replace(array_keys($patterns), array_values($patterns), $str); }
どうでもいいけど、まちゅさんのブックマークコメントが良く分からない。
2007年10月30日 kmachu php, template 変数の中に"#{foo}"という文字列が入っていたら表示が崩れる。 「convert_string("#{$value}")」とした時の$valueの中身が"#{hello}"とかね。まぁ割り切り。
んなこたぁ無いでしょうと思うのですが。