2011-02-22 48 views
5

好吧,我可能會這樣做完全錯誤的,我可能是。但我希望能夠採取之間的HTML ...如下所示:在HTML中捕獲HTML爲一個字符串在PHP中

$str = ?> 
... some HTML goes here ... 
<?php ; 

我完全擺脫我的搖桿想我可以做到這一點?我想不出用什麼辦法說出來,所以我可以在Google上搜索它,這就是爲什麼我在這裏...

回答

8

您可以使用output buffering

ob_start(); 
?> 
... some HTML goes here ... 
<?php 
echo 'php outputs are captured too'; 
$str = ob_get_contents(); 
ob_end_clean(); 

或者,如果它只是HTML的一點點(沒有在PHP代碼中),只是把它寫下來與string formats像定界符之一或nowdoc:

$str = <<<'NOWDOC' 
... some HTML goes here 
NOWDOC; 
+0

精美的作品!我正在使用MVC框架(symfony),並試圖遵守規則,這使事情變得更容易,當然。科莫多將以這種方式格式化HTML!謝謝!! –

6

調查heredocsnowdocs。定界符文本看起來像:

$str = <<<HTML 
    <div>This is some text!</div> 
HTML; 

// We're back in PHP. 
echo $str; 

如果你特別希望與HTML工作,看看XHP

+0

感謝您的回答!我從未聽說過XHP,它看起來非常有趣和有用。我想我會安裝並玩弄它。^_^Facebook開放給OSS社區真是太棒了。我自己使用過卡桑德拉和龍捲風。 –

0

對於這種情況,PHP有一個多行,特別定界的字符串。

This talks about it a little.

+0

感謝您的回答!我嘗試過heredoc,但它並不喜歡因爲某種原因坐在裏面的PHP。它正確地識別了它,因爲它在方法未找到時拋出異常集在類的__get()中。 –

0

只是想補充phihag的答案。

它可以捕捉功能HTML,以及包括與匿名函數:

<?php $bob = function() { ?> 
... some HTML here... 
<?php }; ?> 

後來輸出$鮑勃:

<?php $bob(); ?> 

或捕捉的$輸出鮑勃別處輸出緩衝:

ob_start(); 
$bob(); 
$str = ob_get_contents(); 
ob_end_clean();