2009-07-22 4 views

risposta

14

Verificare ob_start che consente di passare un gestore di callback per la post-elaborazione dell'output dello script.

Per esempio, PHP include una richiamata ob_gzhandler built-in per l'utilizzo in comprimere l'output:

<?php 

ob_start("ob_gzhandler"); 

?> 
<html> 
<body> 
<p>This should be a compressed page.</p> 
</html> 
<body> 

Ecco un esempio più completo che illustra come si potrebbe riordinare il codice HTML con il tidy extension:

function tidyhtml($input) 
{ 
    $config = array(
      'indent'   => true, 
      'output-xhtml' => true, 
      'wrap'   => 200); 

    $tidy = new tidy; 
    $tidy->parseString($input, $config, 'utf8'); 
    $tidy->cleanRepair(); 

    // Output 
    return $tidy; 
} 

ob_start("tidyhtml"); 

//now output your ugly HTML 

Se si desidera assicurarsi che tutti gli script PHP utilizzino lo stesso filtro senza includerlo direttamente, consultare la direttiva di configurazione auto_prepend_file.

+0

+1 per una buona risposta, non conoscevo la classe in ordine. È una classe nativa? –

+0

No, è un'estensione. Installa tramite PECL, ma spesso è confezionato per una facile installazione, ad es. apt-get install php5-tidy su un tipico box Debian/Ubuntu. –

+0

Risposta molto buona, dovrei aggiungerla ai miei siti web – T0xicCode

0

Dai un'occhiata a Smarty. È un sistema di template per PHP, che è una buona pratica da usare e in cui è possibile collegare i filtri di output globali.

0

modifica: la risposta di Paolo è migliore. Quindi sarebbe

ob_start("my_filter_function"); 

La mia risposta originale era:

che può essere raggiunto con output buffering.

Ad esempio:

ob_start(); 
// Generate all output 
echo "all my output comes here." 
// Done, filtering now 
$contents = ob_get_contents(); 
ob_end_clean(); 
echo my_filter_function($contents); 
3

È possibile utilizzare il buffer di uscita e specificare una richiamata quando si chiama ob_start()

<?php 
function filterOutput($str) { 
    return strtoupper($str); 
} 

ob_start('filterOutput'); 
?> 

<html> 
    some stuff 
    <?php echo 'hello'; ?> 
</html> 
1

È possibile utilizzare PHP's output buffering funzioni per farlo

è possibile fornire una metodo di callback che viene chiamato quando il buffer viene svuotato, ad esempio:

In tal caso, l'output viene memorizzato nel buffer anziché inviato dallo script e appena prima dello svuotamento viene richiamato il metodo di richiamata.

Problemi correlati