【发布时间】:2020-07-26 09:42:22
【问题描述】:
所以我目前正在制作一个论坛软件。我想要的那个论坛软件是一个自定义模板引擎。在大多数情况下,我已经创建了模板引擎,但我在 IF、ELSEIF 和 FOREACH 语句中使用的正则表达式存在一个小问题。
我遇到的问题是,当我将一大段 html 代码放入我的正则表达式时,什么都不起作用。这是一个示例:https://regex101.com/r/jlawz3/1。
这是检查正则表达式的 PHP 代码。
$isMatchedAgain = preg_match_all('/{IF:(.*?)}[\s]*?(.*?)[\s]*?{ELSE}[\s]*?(.*?)[\s]*?{ENDIF}/', $this->template, $elseifmatches);
for ($i = 0; $i < count($elseifmatches[0]); $i++) {
$condition = $elseifmatches[1][$i];
$trueval = $elseifmatches[2][$i];
$falseval = (isset($elseifmatches[3][$i])) ? $elseifmatches[3][$i] : false;
$res = eval('return ('.$condition.');');
if ($res===true) {
$this->template = str_replace($elseifmatches[0][$i],$trueval,$this->template);
} else {
$this->template = str_replace($elseifmatches[0][$i],$falseval,$this->template);
}
}
【问题讨论】:
-
...我已经创建了模板引擎... 为什么要重新发明轮子?只需带一些像 smarty 或 slim 这样的 TE,然后做你的事情,而不用担心代码。请记住,您要制作“论坛软件”-而不是模板引擎;)
-
真的有两个原因,首先,在论坛软件中,如果我允许用户在模板内使用php,那么它会带来很大的安全风险。另一个原因是因为我想创建一个模板引擎。我编程的主要原因是学习不同的做事方式,所以我正在制作一个模板引擎来学习如何去做。
-
这个问题的唯一正确答案(已经被问了很多......)是“不要”。如果您不信任我们,请参阅这个投票率很高的问题stackoverflow.com/questions/1732348/… 不要这样做。使用正确的工具来完成工作....或在此处发布论坛链接,以便我们都知道要避免它,以免我们的个人信息成为您傲慢的牺牲品。