Is there any way for all my PHP and/or HTML file output to be "filtered" before being displayed in the browser? I figured that I could pass it through a global function before it is displayed but I'm stuck on the implementation. Please help.
If there is a better way to achieve the same result, I'd be happy to know.
Thanks.
Check out ob_start which lets you pass a callback handler for post-processing your script output.
For example, PHP includes a built-in callback ob_gzhandler for use in compressing the output:
<?php
ob_start("ob_gzhandler");
?>
<html>
<body>
<p>This should be a compressed page.</p>
</html>
<body>
Here's a fuller example illustrating how you might tidy your HTML with the 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
If you wanted to ensure all your PHP scripts used the same filter without including it directly, check out the auto_prepend_file configuration directive.
You can use output buffering and specify a callback when you call ob_start()
<?php
function filterOutput($str) {
return strtoupper($str);
}
ob_start('filterOutput');
?>
<html>
some stuff
<?php echo 'hello'; ?>
</html>
You can use PHP's output buffering functions to do that
You can provide a callback method that is called when the buffer is flushed, like:
<?php
function callback($buffer) {
// replace all the apples with oranges
return (str_replace("apples", "oranges", $buffer));
}
ob_start("callback");
?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php
ob_end_flush();
?>
In that case output is buffered instead of sent from the script and just before the flush your callback method is called.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With