是否有可能改变已经过时的争议?我知道可以使用缓存输出缓冲区,但我们正在谈论已打印的内容。
那是index.php
:
<html>
Hello
<?php
// Is it possible to change already outputed "Hello" here?
?>
即使明白这个问题我也有问题。不应该是“使用PHP进行递归输出操作”吗?
答案 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的评论 - 这个问题表明应该考虑重构,因为使用缓冲区可能会很麻烦,并且可能表明应该考虑采用不同的方法。