当PHP HTML输出已经输出时,是否可以更改它?
是否可以更改已输出的内容?我知道装箱输出缓冲区是可以的,但我们讨论的是已经打印的内容 这就是当PHP HTML输出已经输出时,是否可以更改它?,php,Php,是否可以更改已输出的内容?我知道装箱输出缓冲区是可以的,但我们讨论的是已经打印的内容 这就是index.php: <html> Hello <?php // Is it possible to change already outputed "Hello" here? ?> 你好 我甚至不能把这个问题说清楚。这不应该是“使用PHP进行递归输出操作”吗?是的,您需要使用这些函数根据您的评论,这里是一个假定的实现: <?php // start by c
index.php
:
<html>
Hello
<?php
// Is it possible to change already outputed "Hello" here?
?>
你好
我甚至不能把这个问题说清楚。这不应该是“使用PHP进行递归输出操作”吗?是的,您需要使用这些函数根据您的评论,这里是一个假定的实现:
<?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();
文件
你好
如果响应已经提供给客户端:否。除非您的响应是HTML并且您使用javascript。考虑到第一件事,javascript超出了这个问题的范围:我们在这里讨论后端,正如您建议的客户端操作所指出的,我理解这一点。这不是我评论的中心点。我评论的中心点是,这是不可能的——因为您似乎排除了原始帖子中的输出缓冲。如果没有具体的细节,我认为很难给出答案,所以你应该考虑更新你的问题。例如,我们不知道您的内容是否已经提供,或者例如,您是否正在生成文件的输出渲染。请参阅@Ed Heal链接到文档-这是可能的,我现在正在使用ob_start
执行此操作,如下所示:!我看到你对@Ed Heal答案的评论:输出缓冲是可以接受的。所以,让我推测一下。。。我想您有一个脚本,可以创建一些HTML输出。您希望捕获此信息,然后进行某种操作。您还没有阐明您想要做什么,但是让我们假设您想要对这个HTML进行一些DOM操作。是的,通过输出缓冲和DOMDocument::loadHTML()
,这是完全可能的;e、 g:ob_start();包括“template.php”;/*在这里做事*/$html=ob_get_clean()
将html捕获为字符串并传递到DOMDocument
。它是否准确地回答了我的问题?正如我看到的文档状态:输出控制函数不影响…,只影响PHP代码块之间的echo和data等函数
——这意味着无法修改PHP代码块之外的“Hello”。您的答案是我一直在寻找的答案,但是还有一个可能的改进窗口。@Ultra-为什么不首先编写合理的代码,这样您就不会编写东西,除非您确定它将被发送。似乎是更好的解决方案重写某些东西;-)重构不是问题option@ultra-只是懒惰,而不是重写工作不正常的代码。您必须编写一些代码来修复这两种情况。为什么不只是修复实际问题,而不是它的synptomsEd Heal?您是否曾经编辑过多年前创建的用于商业用途的代码,这些代码必须在合理的时间内完成更改后才能运行?你知道重构不是一个选项。“使用缓冲区会很麻烦。”-为什么?缓冲有它的用途,但在模板生成之外,我很少在代码中看到它,除非它被包装在大量代码中以修复“headers ready sent”(标题已发送)类型错误——通常是在页面中包含大量混合代码和输出的if/else
语句。这很麻烦,因为它会使调试更加复杂。