str_replace(或其他选项),用于替换php文档中的内容

str_replace(或其他选项),用于替换php文档中的内容,php,Php,我正在尝试为我正在制作的CMS创建一个模板文件,其中模板文件可以包含像{username}这样的变量,作为常规文本,当页面包含在index.php页面上时,这些文本将被替换 例如: 索引页: <?php include('templates/123/index.php'); ?> templates/123/index.php页面 <?php include('header.php'); ?> Welcome {username} <?php include(

我正在尝试为我正在制作的CMS创建一个模板文件,其中模板文件可以包含像
{username}
这样的变量,作为常规文本,当页面包含在index.php页面上时,这些文本将被替换

例如: 索引页:

<?php include('templates/123/index.php'); ?>

templates/123/index.php页面

<?php include('header.php'); ?>
Welcome {username}
<?php include('footer.php'); ?>

欢迎{username}
我试过几种方法;但是,总是会遇到问题,因为我试图更改页面内容的页面包含PHP代码。我尝试的每一种方法要么1)因为打开和关闭文档中的PHP标记而出错,要么2)只是回显文档中的PHP代码。我还有什么办法可以做到这一点吗?甚至可以上一节课?我只是希望能够安全地实现这一点


我还将使用它来替换像{content1}get这样的定制变量,替换为一个php代码,该代码将被IonCube从数据库中检索列1中内容的数据,与{column2}{column3}和{column4}相同。我只是想让模板的创建变得非常简单。(因此,我希望代码也能做到这一点)

我喜欢这样做的方法包括从以下内容开始编写代码:

ob_start(function($c) {
    $replacements = array(
        "username"=>"Kolink",
        "rank"=>"Awesome"
    );
    return preg_replace_callback("/{(\w+)}/",function($m) use ($replacements) {
        return isset($replacements[$m[1]]) ? $replacements[$m[1]] : $m[0];
    },$c);
});
我建议采取两个步骤

  • 将文件“templates/123/index.php”的结果加载到变量中。查看此链接了解如何执行此操作
  • 使用strtr()函数将占位符{username}替换为实际值

  • 我认为这将满足您的需要。

    您是否考虑过使用简单的模板语言?比如什么?我当然不介意查看smarty,我不知道它现在是否处于活动状态。我删除了我最后的评论,因为这确实有效。我打错了变量。现在我唯一的问题是,我如何使它工作,以使它取代1)文本(像现在一样)和2)行php代码(
    “username”=>
    ),您不能这样做,因为这是在代码完成后运行的,就在将其发送到浏览器之前。但是,您可以将一个匿名函数作为替换项之一,然后添加一个检查以查看替换项是字符串还是可调用的,并相应地执行操作。我将如何执行此操作?如何将{loginplaceholder}替换为$loginplaceholder变量?您可以添加条目
    “loginplaceholder”=>$GLOBALS['loginplaceholder']
    ,尽管这并不推荐,因为
    $GLOBALS
    可能很昂贵。或者,尝试在函数开头添加
    global$loginplaceholder
    ,然后使用
    “loginplaceholder”=>$loginplaceholder
    。最后也是最好的选择,您可以从
    ob_start(函数($c)开始使用(&$loginplaceholder){
    ,然后将
    “loginplaceholder”=>$loginplaceholder
    添加到数组中,而无需任何进一步的破解。太棒了!一切都成功了..谢谢…给您答案。感谢所有的帮助!