我可以使用 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.
...并将其保存为文本文件?我希望它忽略所有隐藏的<div>
标签,只保存用户可以选择和复制的内容。
我四处寻找这个问题的答案,但我什至不确定我在寻找什么或如何搜索它。
我也试过这个:
ob_start();
file_put_contents('filename.htm', ob_get_contents());
ob_end_flush();
……但这并不能解决问题。我在输出的测试中有一些标签(&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 仅将输出的可见元素保存为新文件吗?的主要内容,如果未能解决你的问题,请参考以下文章