2011-02-22 19 views
5

Okay, allora maybr sto andando tutto sbagliato, probabilmente lo sono. Ma mi piacerebbe essere in grado di prendere il codice HTML tra un ... in questo modo:Catturare l'HTML su una stringa in PHP

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

sono io completamente fuori la mia sedia a dondolo per pensare che io possa fare questo? Non riuscivo a pensare a un modo per metterlo in parole così da cercarlo su Google, ed è per questo che sono qui ...

risposta

8

È possibile utilizzare output buffering:

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

In alternativa, se è solo un po 'di HTML (e nessun codice php all'interno), basta scrivere in giù con uno dei string formats come heredoc o nowdoc:

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

Funziona magnificamente! Sto lavorando con un framework MVC (symfony) e sto cercando di rispettare le regole e questo rende le cose più facili, sicuramente. AND Komodo formatterà l'HTML in questo modo! Grazie!! –

6

Cerca in heredocs e nowdocs. Un heredoc assomiglia:

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

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

Se specificamente desidera lavorare con HTML, esaminare XHP.

+0

Grazie per la risposta! Non ho mai sentito parlare di XHP, sembra davvero interessante e utile. Penso che installerò e giocherò con esso.^_^È fantastico quello che Facebook sta aprendo alla comunità OSS. Ho usato Cassandra e Tornado, me stesso. –

0

PHP ha una stringa multilinea, appositamente delimitata per tali situazioni.

This talks about it a little.

+0

Grazie per la tua risposta! Ho provato heredoc, ma non mi piaceva il PHP che ci sedesse per qualche motivo. Lo ha riconosciuto correttamente perché ha gettato l'eccezione impostata nel __get() della classe quando non è stato trovato un metodo. –

0

Volevo solo aggiungere alla risposta di phihag.

E 'possibile catturare HTML con una funzione così, anche con funzioni anonime:

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

e successivamente uscita $ bob:

<?php $bob(); ?> 

o catturare l'output di $ bob da qualche altra parte con buffer di uscita:

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