如何将大括号替换为<;?php?>;在php文件中?

如何将大括号替换为<;?php?>;在php文件中?,php,str-replace,Php,Str Replace,我想用php扩展名文件中的替换大括号。 我有一个类作为库,在这个类中我有三个函数,如下所示: function replace_left_delimeter($buffer) { return($this->replace_right_delimeter(str_replace("{", "<?php echo $", $buffer))); } function replace_right_delimeter($buffer) { return(str_repl

我想用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();
}
在输出中,我只保存tmpstr,在浏览器中保存源代码

<?php echo $tmp; ?> 
tmpstr

tmpstr
在include file
中,这是如何工作的:

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;
process.php < my_file.php

您在此处尝试的操作无效。输出缓冲回调执行的替换发生在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);
$tp=file_get_contents(APP_DIR.DS.view.DS.view.php);
$tp=str_replace(“{,”,$tp);
评估(tp);
但是,我强烈建议使用现有的模板引擎;这种方法效率低且有限。例如,您可能希望试一试。

执行以下操作:

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;
}

忽略其他两个函数。

用php编辑php页面通常是一个糟糕的选择idea@Dagon我不想让你说出你的想法!如果你不能帮助我,为什么给我不一样?!!!!:|如果你不想要我的意见。不要发布。第一次否决票不是我的,但第二次会很抱歉,我不明白哪个代码适用于哪个部分?:(我想替换include文件中的主题。
process.php
是一个将执行替换的php脚本。
my_文件。php
是要在其中进行替换的文件。
bash脚本
是从命令行执行的。谢谢。但是在include文件中“非常感谢:)在include文件中”在您的代码中,我也会遇到这样的错误:“解析错误:语法错误,意想不到的”。在您的模板中可能会出现语法问题。请考虑打印<代码> $tp>代码>,而不是为了测试目的而评估它,并确保结果生成SENSE.I模板仅此:<代码> {TMP}TMPSTR
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;
}