如何在php文件中用<! - ?php? - >替换大括号?

时间:2015-10-08 05:26:08

标签: php str-replace

我想在带有php扩展名的文件中用<?php ?>替换大括号。 我有一个类作为库,在这个类中我有三个这样的函数:

 function replace_left_delimeter($buffer)
{
    return($this->replace_right_delimeter(str_replace("{", "<?php echo $", $buffer)));
}

function replace_right_delimeter($buffer)
{
    return(str_replace("}", "; ?> ", $buffer));
}

function parser($view,$data)
{
    ob_start(array($this,"replace_left_delimeter"));
    include APP_DIR.DS.'view'.DS.$view.'.php';
    ob_end_flush();
}

我有一个带有php扩展名的视图文件,如下所示:

{tmp} tmpstr
输出中的

我只保存了tmpstr和浏览器中的源代码

<?php echo $tmp; ?> 
tmpstr

在包含文件<?显示为<!--?并进行评论。为什么呢?

3 个答案:

答案 0 :(得分:2)

你在这里尝试做的事情不会奏效。在已经解析并执行PHP代码之后,由输出缓冲回调执行替换。在这个阶段引入新的PHP代码标签不会导致它们被执行。

在评估之前,您需要预先处理PHP源文件,例如

$tp = file_get_contents(APP_DIR.DS.'view'.DS.$view.'.php');
$tp = str_replace("{", "<?php echo \$", $tp);
$tp = str_replace("}", "; ?>", $tp);
eval($tp);

但是,我强烈建议使用现有的模板引擎;这种方法效率低下且有限。例如,你可能想给Twig一个镜头。

答案 1 :(得分:0)

这样做:

function parser($view,$data)
{
    $data=array("data"=>$data);
    $template=file_get_contents(APP_DIR.DS.'view'.DS.$view.'.php');
    $replace = array();
    foreach ($data as $key => $value) {
        #if $data is array...
        $replace = array_merge(
            $replace,array("{".$key."}"=>$value)
            );
    }

    $template=strtr($template,$replace);
    echo $template;
}

并忽略其他两个功能。

答案 2 :(得分:-1)

这是如何运作的:

<强> process.php

<?php

$contents = file_get_contents('php://stdin');

$contents = preg_replace('/\{([a-zA-Z_][a-zA-Z_0-9]*)\}/', '<?php echo $\1; ?>', $contents);
echo $contents;

bash脚本

process.php < my_file.php

请注意,上述工作通过一次性搜索和替换。如果要动态执行此操作,可以轻松修改脚本。

另请注意,从PHP代码中修改PHP代码是个坏主意。自修改代码可能导致难以发现的错误,并且通常与恶意软件相关联。如果你解释你想要实现的目标 - 你的目的 - 你可能会得到更好的回应。