它已经输出时是否可以更改PHP HTML输出?

时间:2014-03-08 10:27:49

标签: php

是否有可能改变已经过时的争议?我知道可以使用缓存输出缓冲区,但我们正在谈论已打印的内容。

那是index.php

<html>

Hello

<?php

// Is it possible to change already outputed "Hello" here?

?>

即使明白这个问题我也有问题。不应该是“使用PHP进行递归输出操作”吗?

2 个答案:

答案 0 :(得分:2)

是的,您需要使用这些功能http://www.php.net/manual/en/book.outcontrol.php

答案 1 :(得分:0)

以下是基于您的评论的假设实现:

<?php 
// start by capturing output in a buffer to capture the html output
ob_start(); ?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Document</title>
    </head>
    <body>
        <p>Hello</p>
    </body>
</html>

<?php
// next, clean the buffer and assign to variable
$html = ob_get_clean();
// create a DOMDocument and load the captured output
$doc = new DOMDocument();
$doc->loadHTML($html);
// let's do something to the rendered output,
// for example, find the first <p> node and change its value
$nodes = $doc->getElementsByTagName('p');
$p = $nodes->item(0);
$p->nodeValue = 'replaced!';

// finally, echo the updated content as normal
echo $doc->saveXML();

希望这会有所帮助:)

修改

抱歉!自从我写这个答案以来,我没有看到这个问题被接受了。向@Ed Heal道歉。顺便说一句,我同意Ed的评论 - 这个问题表明应该考虑重构,因为使用缓冲区可能会很麻烦,并且可能表明应该考虑采用不同的方法。