我正在尝试构建一个可以基于模板创建文件的系统。 模板存储在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;
?>
有更好的方法吗?
答案 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;
?>