Come prevenire echo in PHP e catturare ciò che è dentro?

Ho una function ( DoDb::printJsonDG($sql, $db, 1000, 2) ) che echos json. Devo prenderlo e quindi utilizzare str_replace () prima che venga inviato all'utente. Tuttavia non posso impedirgli di fare eco. Non voglio cambiare printJsonDG perché è utilizzato in molte altre posizioni.

Puoi utilizzare le ob_start() e ob_get_contents() in PHP.

 <?php ob_start(); echo "Hello "; $out1 = ob_get_contents(); echo "World"; $out2 = ob_get_contents(); ob_end_clean(); var_dump($out1, $out2); ?> 

Produrrà:

 string(6) "Hello " string(11) "Hello World" 

Puoi farlo usando le funzioni di buffering dell'output.

 ob_start(); /* do your echoing and what not */ $str = ob_get_contents(); /* perform what you need on $str with str_replace */ ob_end_clean(); /* echo it out after doing what you had to */ echo $str; 

Forse puoi refactorizzare DoDb :

 class DoDb { public static function getJsonDG( $some, $parameters ) { /* original routine from printJsonDG without the print statement */ return $result; } public static function printJsonDG( $some, $parameters ) { print self::getJsonDG( $some, $parameters ); } } 

In questo modo non devi toccare il codice altrove nella tua applicazione.

Controlla il buffer di output , ma preferirei cambiare la function ora che sembra che verrà usata per due cose. Semplicemente restituire la string sarebbe la cosa migliore.