将使用 PHP file_get_contents 抓取的 HTML 内容显示为 div 中的纯文本

Display HTML content scraped using PHP file_get_contents as plain text within a div

我阅读了一些关于在页面中将 html 内容显示为纯文本的论坛帖子,但我的情况略有不同,因此提出了一个新问题。

我在一个页面中有两个 Div

1) 输入div,我会让用户插入一个URL(比如ebay.com,如下所示)

<div id="inputs">
<h3>Inputs</h3>
    <form id="inputs" method="POST">
        <label for="urltoget">URL to Get: </label>
        <input type="text" name="urltoget" id="urltoget" size="50" value="www.ebay.com"><br><br>
        <input type="submit" name="geturl" value="Step1">
    </form>

2)输出Div,这里我想用PHP&file_get_contents来显示输入URL的内容。 问题是我想在输出 div.

中以明文形式显示输出而不是完整的 HTML
if($_SERVER['REQUEST_METHOD'] === 'POST'){
$base_url = $_POST['urltoget'];
$contents = file_get_contents($base_url);
print_r($contents);

我在输出 div.

中得到了包含 HTML 内容的整个 ebay 页面

到目前为止,我尝试了以下操作:

1) PHP 代码中的 header('content-type: text/plain'); 按预期将整个页面呈现为纯文本。但是我只想要第二个输出的内容 div 作为纯文本而不是整个页面。

2) print_r(htmlentities($contents));echo htmlspecialchars($contents); 在 PHP 代码中插入此代码不会在第二个输出 div 中显示任何内容。它也不会抛出任何错误。

3) var_dump($contents); 也不行,显示如下:

string

huge blanks space to scroll down & display

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">var ue_t0=ue_t0||+ne'... (length=187558)

我的问题:如何在第二个 div 中以纯文本形式获取 HTML 内容(包括 html 标签)? 请帮忙!!

============================================= ===================

Terrymorse 的解决方案成功了

<?php
$rawHTML = '<html><h1>This is a Title</h1></html>';
$encodedHTML = str_replace('<','&lt;',$rawHTML);
?>

<html>
    <body>
        <h3>
            The Encoded HTML
        </h3>
        <div style="border: 1px solid gray; padding: 12px">
            <pre><?php echo $encodedHTML; ?></pre>
        </div>
    </body>
</html>

感谢@markb 对 var_dump 的建议。输出看起来更清晰

您可以简单地通过将 < 的所有实例转换为 &lt; 来阻止对 HTML 标签的评估。示例:

<?php
$rawHTML = '<html><h1>This is a Title</h1></html>';
$encodedHTML = str_replace('<','&lt;',$rawHTML);
?>

<html>
    <body>
        <h3>
            The Encoded HTML
        </h3>
        <div style="border: 1px solid gray; padding: 12px">
            <pre><?php echo $encodedHTML; ?></pre>
        </div>
    </body>
</html>

或者,还有 <xmp> 标签,但它已过时。 <xmp> 上的 Mozilla documentation 建议使用 <pre><code> 代替。