PHP标签替换方法

Lee*_*Lee 2 html php tags preg-match-all str-replace

我将HTML布局存储在MySQL数据库中.这些布局可能包含HTML中的标签,如下所示.

{site.poll="fred,joe,john"}
Run Code Online (Sandbox Code Playgroud)

{site.layout.header}
Run Code Online (Sandbox Code Playgroud)

目前我正在搜索HTML模板,通过执行多个preg_matches来识别标签,循环遍历数组然后执行str_replace(),替换为另外的部分html模板也从数据库中拉回来.下面的示例..

  if (preg_match_all('/{site\.layout\.(.)*}/', $data, $match) != FALSE)
  {
     foreach($match[0] as $value)
     {
        $value = trim($value, '{}');

        $tmp_store   = explode('.', $value);
        $tmp_partial = $this->parse($this->get_layout(end($tmp_store)));
        $data        = str_replace('{'. $value .'}', $tmp_partial, $data);
     }
  }
Run Code Online (Sandbox Code Playgroud)

我需要为我需要的每个标签执行一个正则表达式,然后在该标签的每个实例上执行一个str_replace ..同样需要为每个所需的部分模板执行..对我来说,这似乎都很重...

有没有更好的方法呢?

提前致谢..

编辑:我不想使用现有的库,我想自己做这个任务,并在此过程中学习..

Cfr*_*eak 5

那么你可以用preg_replace一次性查找和替换你的标签.

我认为最好的方法是使用现有的模板系统,如Twig或Smarty.我确信您可以将数据读入Smarty(它不必来自文件).我敢肯定Twig有类似的东西.

Twig和Smarty还提供缓存选项,因此您不会在每次请求时重建模板.但是,如果模板存储在文件中,它们的效果最佳.

如果你真的必须推出自己的模板系统,你应该构建一种实际上按字符检查内容的解析器.这可能比正则表达式更快更准确(虽然更复杂)