ob_get_clean - 如何str_replace两个变量?

时间:2014-07-30 07:02:42

标签: php mysql variables ob-start

在我的页面顶部,我有一个面包屑。

ob_start();
<li>##product##</li>
<li>##category##</li>

在此之后,我运行mysql查询来获取变量:

$product
$category

然后我跑:

<?php echo str_replace("##product##", $product, ob_get_clean())  ?>
<?php echo str_replace("##category##", $category, ob_get_clean())  ?>

变量$ product被替换,我看到第二个变量不会被替换,因为我已经为产品调用了ob_get_clean())。

如何使用ob_get_clean函数替换两个字符串?

6 个答案:

答案 0 :(得分:1)

ob_get_clean()的结果分配给变量:

$ob = ob_get_clean();
$ob = str_replace("##product##", $product, $ob);
$ob = str_replace("##category##", $category, $ob);
echo $ob;

答案 1 :(得分:1)

使用ob_get_contents而不是ob_get_clean。

$product = 'product 1';
$category = 'category1';
ob_start();
echo '<li>##product##</li>
      <li>##category##</li>';


$template = ob_get_contents();

$template = str_replace("##product##", $product, $template);
$template = str_replace("##category##", $category, $template);

ob_end_clean();
echo $template;

答案 2 :(得分:0)

试试这个:

$find = array("##product##", "##category##");
$replace = array($product, $category);
echo str_replace($find, $product, ob_get_clean());

答案 3 :(得分:0)

问题是,你是从一个来源复制变量。

你能做的最好的是:

$from = array("##product##", "##category##");
$to = array($product, $category);
echo str_replace($from, $to, ob_get_contents());

或者您可以在一行中运行多个功能。注意$replaced与输入和输出相同:

$replaced = ob_get_contents();
$replaced = str_replace("##product##", $product, $replaced);
$replaced = str_replace("##category##", $category, $replaced);
echo $replaced;

我知道,它实际上是使用第一种方法,因为你只用数据提供它一次。

答案 4 :(得分:0)

改为使用ob_get_contents()

<?php echo str_replace("##product##", $product, ob_get_contents())  ?>
<?php echo str_replace("##category##", $category, ob_get_contents())  ?>

如果使用ob_get_clean(),则在第一次调用后删除输出缓冲区。

答案 5 :(得分:0)

ob_get_clean()基本上同时执行ob_get_contents()ob_end_clean()

<?php 
    ob_start();
    echo str_replace("##product##", $product, ob_get_contents());
    echo str_replace("##category##", $category, ob_get_contents());
?>