在PHP应用程序中替换标记

时间:2013-10-17 20:35:00

标签: php template-engine

我正在为我们的内部目的创建一个小型模板引擎。我们有几个HTML模板,其中包含{token.name.value}形式的标记。我们将它提交给后端然后执行其操作并用相应的值替换令牌。但是,这是一个漫长的过程,如果模板不起作用,会有很多后退。

所以,我想在数据库或json文件中将所有标记作为{key:value}对。然后我们可以选择模板和json字典文件,应用程序可以使用字典文件替换模板中的标记,并向我们显示输出。

我可以做其余的但我不知道如何更换模板中的标记。我该如何解析html模板?是否使用了preg_replace函数?

感谢。

1 个答案:

答案 0 :(得分:0)

IHMO似乎您需要一个真实的模板引擎用于您的用例,例如优秀的TwigSmarty。它们可以让您的生活更轻松,无需担心如何解析和移动模板代码,让您专注于应用程序逻辑。

但有时候,不必处理完整的模板语言并且仍然能够替换简单的键值对可能是切合实际的。对于那些特定的,狭窄的用例,这里是我使用的一个小辅助函数。

function replace_tokens($html) {
  $token_format = '/{([^}]+)}/';

  preg_match_all($token_format, $html, $matches, PREG_SET_ORDER);

  foreach ($matches as $match) {
    switch ($match[1]) {
      case 'token.one':
        $html = preg_replace('/' . $match[0] . '/', 'Value One !', $html, 1);
        break;

      case 'token.two':
        $html = preg_replace('/' . $match[0] . '/', 'Value Two.', $html, 1);
        break;

      default:
        break;
    }
  }

  return $html;
}

它快速而且很脏,但它完成了解析工作。 switch部分是可选的,有许多更好的方法可以将{key}匹配与实际密钥进行比较。