模板字符串替换在PHP中

时间:2014-10-15 21:02:49

标签: php arrays string replace eval

我正在尝试构建一个可以基于模板创建文件的系统。 模板存储在DB中,我使用表单发送的数据填充模板。

我尝试过这样做但我无法使用数组。它总是给我错误。

<?php

$string = "test";
$text = "This is a text for testing";

$rplc_string = '{$string}';
$rplc_text = '{$text}';

$tpl = '<html><head><title>{$string}</title></head><body><h1>{$string}</h1><p>{$text}</p><ul><?php foreach($array as $key => $value): ?><li><?php echo $key; ?></li><?php endforeach; ?></ul></body></html>';

$tpl = preg_replace($rplc_string, $string, $tpl);
$tpl = preg_replace($rplc_text, $text, $tpl);

$array = array( 'one' => '1', 'two' => '2', 'three' => '3' );

ob_start();
eval('?>' . $tpl);
$output = ob_get_clean();

echo $output;

?>

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

您的代码中存在多个错误。首先,您认为变量将在单引号之间进行解释。这是错误的。变量仅在双引号之间或使用heredoc语法进行解释。

第二个错误也是语法错误。编写正则表达式模式时,需要添加分隔符。但是由于你忘记了它们,大括号被视为模式分隔符而不是文字字符。

答案 1 :(得分:0)

在定义$ tpl

时,用单引号替换双引号

preg_replace的第一个arg也需要是一个正则表达式:

<?php

$string = 'test';
$text = 'This is a text for testing';

$rplc_string = '/{\$string}/';
$rplc_text = '/{\$text}/';


$tpl = '<html><head><title>{$string}</title></head><body><h1>{$string}</h1><p>{$text}</p><ul><?php foreach($array as $key => $value): ?><li><?php echo $key; ?></li><?php endforeach; ?></ul></body></html>';

$array = array( 'one' => '1', 'two' => '2', 'three' => '3' );

$tpl = preg_replace($rplc_string, $string, $tpl);
$tpl = preg_replace($rplc_text, $text, $tpl);

ob_start();
eval('?>' . $tpl);
$output = ob_get_clean();

echo $output;

?>