2011-07-14 30 views
2

我有一个生成HTML代码像下面如何捕捉函数生成的HTML?

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

当然,它更先进,更添加各种用户选项的PHP函数。

在大多数情况下,我把这个函数内联,而不是把它附加到一个字符串。不过,我已经到了第一次出现(可能不是最后一次出现),我需要将呈现的HTML存储在字符串中,而不是直接发送到解析器以构建页面。

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

回答

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 *输出缓冲

+0

因为它没有被明确地说过,所以称为“输出缓冲”,因此称为“ob”。 – zzzzBov

+0

+1,(编辑:nevermind即时通讯错误) – Rob

+0

是的,感谢您追加信息...:) –

1

这听起来像输出缓冲器是一个可能的解决您的问题。

您使用的输出缓冲器,像这样:

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

的$缓冲区变量现在包含任何由函数打印出来。

总是用ob_end_clean或ob_end_flush关闭输出缓冲区很重要。你可以在这里阅读更多:http://php.net/manual/en/book.outcontrol.php

的问候, 克里斯

+0

谢谢,所以我应该在清洁结束时使用ob_end_flush? – JustinKaz

+0

这不是必需的,可能会导致警告。 ob_end_clean清除以ob_start开头的输出缓冲区,而ob_end_flush在清空输出缓冲区之前打印输出缓冲区中的内容。你或者使用其中一个:-) – cgwyllie

1

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

确保你...它仅仅指刚使用翻译包含在函数中:-)

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实际输出html直接用自己的echo然后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 
} 
+0

太好了,现在你想让我重写我的整个Web服务......可怕的人。大声笑。 – JustinKaz

+0

我发现在html中吐出上下文,进行线框和保持标准容易得多。这也是为什么我喜欢PHP的任何其他解决方案,希望我操纵整个网站的字符串...我正在做先进的数据处理...如果它仍然是明智的,我想它更好地坚持标准不。 – JustinKaz

+0

P.S.上述功能仅仅是一个例子......真正的功能连接到数据库并打印出图像。我正在调用此函数的函数使用类似“

{{title}}
{{image:{{urf}}}} {{post data}}
”的字符串,并解析用于构建订单项(流发布)的{{}}命令。这个paritucluar寻找{{image:x}}(使用正则表达式)并调用图像采集卡。我基于我的例子的功能。还在继续? – JustinKaz