preg_replace - 在输出开头替换内容返回

时间:2014-09-07 19:14:36

标签: php preg-replace create-function

由于这个问题,我失去了很多时间,而且我真的辞职了。

当我使用带有create_function的preg_replace时,所有结果都在输出的开始处,但它们应该在创建匹配的位置,就像:

  

COMPONENT1 COMPONENT2 Maecenas malesuada elit lectus felis,malesuada ultricies。 Curabitur   et ligula。 Ut molestie a,ultricies porta urna。 Vestibulum commodo   volutpat a,convallis ac,laoreet enim。菜豆(Phasellus fermentum),dolor。   Pellentesque facilisis。 Nulla imperdiet坐在amet magna。前庭   dapibus,mauris nec malesuada fames ac turpis velit,rhoncus eu,   luctus et interdum adipiscing wisi。

应该是:

  

Maecenas malesuada elit lectus felis,malesuada ultricies。 Curabitur   et ligula。 Ut molestie a,ultricies porta urna。 Vestibulum commodo   volutpat a,convallis ac,laoreet enim。 dolor中的菜豆发酵物 COMPONENT1 。   Pellentesque facilisis。 Nulla imperdiet坐在amet magna COMPONENT2 。前庭   dapibus,mauris nec malesuada fames 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;
}

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

1 个答案:

答案 0 :(得分:0)

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

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

}

应该这样做。