如何捕获函数生成的HTML?

时间:2011-07-14 15:54:12

标签: php html

我有一个生成HTML代码的php函数,如下所示

function j_uf_SomeFunction($some_var) {
    ?><div class="db_photo">
        <img alt="<?php echo some_php_function ?>" src="<?php echo $some_var; ?>" />
    </div><?php
}

当然,它更先进并添加各种用户选项。

在大多数情况下,我将此函数设置为内联,而不是将其附加到字符串。但是,我第一次出现(可能不是最后一次)我需要将呈现的HTML存储在一个字符串中,而不是将它直接发送到解析器来构建页面。

我需要关闭该功能并告诉它采取生成的html并将其存储在一个字符串中,而不是仅在某些情况下将其发送到页面。

3 个答案:

答案 0 :(得分:5)

function j_uf_SomeFunction($some_var) {
    ob_start();
    ?><div class="db_photo">
        <img alt="<?php echo some_php_function ?>" src="<?php echo $some_var; ?>" />
    </div><?php
  return ob_get_clean();//suggestion by GWW
}

ob_start()正在启动缓冲区接收 ob_get_clean()清除当前缓冲区并返回其值。

有关http://php.net/manual/en/function.ob-start.php

的更多信息

ob * output buffering

答案 1 :(得分:1)

听起来输出缓冲区是解决问题的唯一方法。

您使用如下输出缓冲区:

ob_start();
j_uf_SomeFunction($someVar);
$buffer = ob_get_contents();
ob_end_clean();

$ buffer变量现在包含函数打印的任何内容。

始终使用ob_end_clean或ob_end_flush关闭输出缓冲区非常重要。您可以在此处阅读更多内容:http://php.net/manual/en/book.outcontrol.php

此致   克里斯

答案 2 :(得分:1)

  

我没有模板系统来解析这个函数值...它不是你的标准函数调用。

确定你做了......它的jsut包含在函数中: - )

使用翻译:

function j_uf_SomeFunction($some_var) {
    $html = "<div class="db_photo"><img alt="%some_function_result%" src="%some_var%" /></div>";
    $tokens = array(
      '%some_var%' => $some_var,
      '%some_function_call_result%' => some_function_call()
    );

    return strtr($html, $tokens); // or echo
}

使用字符串操作:

function j_uf_SomeFunction($some_var) {
    $html = '<div class="db_photo"><img alt="%s" src="%s" /></div>';

    return sprintf($html, some_function_call(), $some_var); //or echo
}

如果some_function_call实际上直接用自己的echo输出html,那么jsut使用缓冲区:

   function j_uf_SomeFunction($some_var) {
    ob_start();
    some_function_call();
    $somefunc = ob_get_clean();

    $html = '<div class="db_photo"><img alt="%s" src="%s" /></div>';
    return sprintf($html, $somefunc, $some_var); //or echo
}