将渲染的HTML输出为纯文本

6
我想展示 PHP 文件抛出的渲染输出作为文本。文本应该包含 HTML 标签。就像您在网页上执行“查看源代码”时所获得的那样。我如何实现这一点?

像通过htmlspecialchars发送你的HTML应该可以解决问题。 - Class
or just use the <pre> tag. - giorgio
1
一个 pre 标签并不能让它们神奇地变得可见,它们会像任何 HTML 标签一样被处理。如何在 <code>/<pre> 标签中直接显示 <div> 标签? - Class
5个回答

11

既然您提到希望输出结果类似于查看源代码,那么您可以在脚本开头简单地声明内容类型为纯文本。

这将使输出结果呈现为文本形式,且文本文件可供下载。

例如:

<?php
header("Content-Type: text/plain");
echo '<html><head><title>Hello</title></head><body><p>helloooooo</p></body></html>';
echo $_SERVER['REMOTE_ADDR'];
?>
希望这能讲清楚,否则如果你想向用户显示此内容,另一种方法是将输出通过htmlspecialchars();函数进行传递。
例子:
$content = '<html><head><title>Hello</title></head><body>p>helloooooo</p></body></html>';
echo htmlspecialchars($content);

第一个有点用...现在我只需要一种不下载就能显示它的方法。第二个并不真正起作用。它输出生成某些HTML代码的PHP代码。 - maxxon15
嗨,我想知道为什么会输出php代码,因为这不可能发生。你能在这里发布代码吗? - Nimeshka Srimal
2
这是因为在他的代码库中,他使用了像echoprint等语句。现在他可能已经将整个源代码放入引号中... - RichardBernards
1
实际上,文件是显示还是提示下载取决于浏览器。如果您在Firefox中尝试此操作,它可能会要求您保存文件,而Chrome则会打开并显示文本。不过我对此并不100%确定。 - Nimeshka Srimal
这就是@RichardBernards建议的。 但是下载的文件确实完美无缺。+1 - maxxon15
3
应该是text/plain,而不是plain/text - Lexikos

1
为了做到这一点,最简单的方法是捕获输出的所有内容并将其缓冲。在最后,您可以决定是否像往常一样呈现它,还是使用 htmlspecialchars() 显示源代码。
在您的代码开头放置以下语句:
$outputType = 'viewsource';
ob_start();

在你的代码末尾,添加以下内容:
$output = ob_get_contents();
ob_end_clean();
if($outputType == 'viewsource') {
    echo htmlspecialchars($output);
} else {
    echo $output;
}

这个可以运行...但它会弄乱一些Unicode字符并输出奇怪的垃圾字符代替它们。 - maxxon15
你能给我一个混乱字符的例子吗?同时告诉我它们应该是什么样的。 - RichardBernards

1
尝试使用php的show_source();函数。将其链接到您的文本文件,例如:
show_source("/link/to/my_file.html");

要小心使用它,因为它可能会暴露密码和其他敏感信息。


已经尝试过了。该文件包含将呈现为HTML的PHP代码。show_source只会暴露一些PHP代码。 :/ - maxxon15

0

有多种方法可以实现这一点,最简单的方法是使用pre标签,或者您可以将文件从.php重命名为.phps,或者使用highlight_file($file)来对代码进行语法高亮。还有file_get_contents()show_source(),正如@hackitect所提到的。

但请记住,任何HTML代码都必须在pre标签中输出并进行转义。


“pre”标签并不能很好地工作...请参见上面的评论,并将文件从“.php”重命名为“.phps”,可以输出HTML,但其中包含PHP代码。 我正在尝试获取由PHP文件输出的最终呈现的HTML...就像在网页上执行“查看源代码”时所获得的内容。 - maxxon15

0

我曾经用的另一个技巧是创建一个包含view-source URL的超链接。

在Chrome、Firefox和Opera上完美运行,但在IE上不行。

<a target="_blank" href="view-source:https://dev59.com/vYXca4cB1Zd3GeqPHFk5">获取纯文本</a>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接