preg_replace - 替换输出开始处返回的内容

Posted

技术标签:

【中文标题】preg_replace - 替换输出开始处返回的内容【英文标题】:preg_replace - replaced content returns at the begining of output 【发布时间】:2014-11-01 01:22:57 【问题描述】:

因为那个问题我浪费了很多时间,我真的辞职了..

当我将 preg_replace 与 create_function 一起使用时,所有结果都在输出开始时进行,但它们应该位于创建匹配的位置,就像:

COMPONENT1 COMPONENT2 Maecenas malesuada elit lectus felis,malesuada ultricies。库拉比图尔 et ligula。 Ut molestie a, ultricies porta urna。前庭 commodo volutpat a, convallis ac, laoreet enim。豆芽在,dolor。 Pellentesque facilisis。 Nulla imperdiet 坐在 amet magna 上。前庭 dapibus, mauris nec malesuada 成名 ac turpis velit, rhoncus eu, luctus et interdum adipiscing wisi。

应该是:

Maecenas malesuada elit lectus felis,malesuada ultricies。库拉比图尔 et ligula。 Ut molestie a, ultricies porta urna。前庭 commodo volutpat a, convallis ac, laoreet enim。豆豆COMPONENT1中,苦涩。 Pellentesque facilisis。 Nulla imperdiet 坐在 amet magna COMPONENT2。前庭 dapibus, mauris nec malesuada 成名 ac turpis velit, rhoncus eu, luctus et interdum adipiscing wisi。

function getcomponent($source)
   $get = getXML(datadir.$source.'.xml')->content;
   $getcomp = create_function("",' ?>'.$get.'<?php ');
   $getcomp();


preg_match_all("/\[\#PHP (.*?) \#\]/",$content,$content3);

foreach ($content3[1] as $value)  //$content3[0]
    $content2 = preg_replace("/\[\#PHP ".$value." \#\]/",getcomponent($value),$content);
    $content = $content2;

我将非常感谢每一个提示。干杯!

【问题讨论】:

我认为通过简化示例代码,您有点过火了。几个问题:你为什么要使用这样的 create 函数然后立即调用它? $内容是什么?一般来说,你想在这里做什么?您似乎正在从文件中获取 XML,您想用它做什么? 您好! $content 是来自 XML 文件的页面内容,在该内容中我有类似 [# component1 #] 和 [# component2 #] 的内容,我想用来自 component1.xml 和 component2.xml 的内容替换它。但是在那个组件 xml 中,我有一个简单的 PHP 代码,我想执行它,这就是我使用这个 create_function 的原因 - 它是 eval() 函数的覆盖 【参考方案1】:

您的 getcomponent 函数应该返回检索到的 XML,而不是打印它。

function getcomponent($source)
    $get = getXML(datadir.$source.'.xml')->content;
    $getcomp = create_function("",' ?>'.$get.'<?php ');
    ob_start();
    $getcomp();
    return ob_get_clean();


应该可以解决问题。

【讨论】:

是的,你是对的,但是这样我得到了返回的纯 PHP 代码,没有经过 PHP 评估 更新了答案以使用输出缓冲来获取变量中的输出并返回。如果您使用的是框架,请确保它没有使用输出缓冲。

以上是关于preg_replace - 替换输出开始处返回的内容的主要内容,如果未能解决你的问题,请参考以下文章

用preg_replace替换字符

php preg_replace 帮助 iframe src

php preg_replace遇到替换本身有括号的内容怎么办

替换此 HTML 标记的 preg_replace 正则表达式是啥?

php 中preg_replace执行一个正则表达式的搜索和替换

preg_replace替换属性中为null