我可以使用 PHP 仅将输出的可见元素保存为新文件吗?

Posted

技术标签:

【中文标题】我可以使用 PHP 仅将输出的可见元素保存为新文件吗?【英文标题】:Can I use PHP to save only the visible elements of the output as a new file? 【发布时间】:2011-11-23 02:41:13 【问题描述】:

我有一个 php 文件,它接受一个 xml 文件(由外部源生成)并使用 CSS 和 html 重新格式化它。许多 XML 标记是我不想在最终版本中看到的,所以我将它们隐藏起来。最终结果是这样的:

<html>
<div style="display: none">
    content i don't want to see
</div>

content I do want to see.

</html>

有没有一种方法可以获取在浏览器窗口中显示的生成的 html 文件,

content I do want to see.

...并将其保存为文本文件?我希望它忽略所有隐藏的&lt;div&gt; 标签,只保存用户可以选择和复制的内容。

我四处寻找这个问题的答案,但我什至不确定我在寻找什么或如何搜索它。

我也试过这个:

ob_start();
file_put_contents('filename.htm', ob_get_contents());
ob_end_flush();

……但这并不能解决问题。我在输出的测试中有一些标签(&amp;gt; 等)需要在显示时保存,ob_get_contents() 获取页面的源代码,而不是显示的版本。

这很重要,因为输出的页面也是基于其他因素生成的PHP,所以我需要使用html unicode值来防止$符号和引号弄乱源PHP。

我希望这很清楚。提前感谢您的任何帮助或建议。

【问题讨论】:

在浏览器中显示或不显示的方式有很多种。您本质上想要的是让整个网站由完整的浏览器引擎解释,然后检索“人类所见”的版本。老实说,必须有更好的解决方案来解决您要解决的任何问题。 本身不是“人类所见”,而是被复制并粘贴到记事本中时所看到的更多。 【参考方案1】:

我认为您必须使用 RegEx 手动删除不需要的部分,可能类似于:

$content_raw = ob_get_contents();
$content_stripped = preg_replace($content_raw, '<div style="display: none">[^<>]*</div>', '');
file_put_contents('filename.htm', $content_stripped);

【讨论】:

ereg_replace?这已被弃用,取而代之的是 preg_* 变体。 真的。请改用 preg_replace。 这很有帮助,但是如何转换 $#34; 值,因为它们会在不与编写它们的 PHP 混淆的情况下显示?

以上是关于我可以使用 PHP 仅将输出的可见元素保存为新文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以仅将 HSQLDB 持久保存到内存中没有任何数据的文件?

如何保存为新文件并继续处理Vim中的原始文件?

代码仅将文本文件的一行保存到数组中

如何使用jQuery仅将可见的tr表导出到excel

编辑文件上的数据并将其保存为新文件而不是覆盖它

ffmpeg仅将传入的RTP音频流保存到文件中