如何在没有eval()的情况下制作自己简单,快速,安全的PHP模板?

时间:2011-07-07 20:24:39

标签: php security templates

如何为MySQL记录创建没有eval()的简单,快速和安全的PHP MySQL模板:

+--------------------------------------------------------------+
|  id | content                                                |
|--------------------------------------------------------------|
|  12 | Today is {date}<br />Current time {include 'time.php'} |
+--------------------------------------------------------------+

{date}必须返回echo date('l');,time.php内容为<?php echo date('h:i A'); ?>

预期结果为:

  

今天是星期四当前时间23:17 PM

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式搜索文本,也可以使用替换方法获得所需的效果。

要构建一个复杂的模板引擎,我会引用twig或Smarty(或其他),看看他们是如何做到的。

答案 1 :(得分:0)

有可能通过preg_replaceinclude的示例:

function finclude($file){
    return include($file);
}

$str = "Today is {include 'date.php'}.";
echo preg_replace("/\{include '(.*)\'}/e", 'finclude("$1")', $str);

date.php:

<?php return date('jS \of F'); ?>, 2011

将返回:Today is 20th of July.

有没有人知道在没有/e eval的情况下更好的方式(安全,速度表现)?