【问题标题】:Display HTML content scraped using PHP file_get_contents as plain text within a div将使用 PHP file_get_contents 抓取的 HTML 内容显示为 div 中的纯文本
【发布时间】:2016-06-12 22:41:21
【问题描述】:

我阅读了一些关于在页面中将 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) Output 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 代码中插入 this 不会在第二个输出 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 的建议。输出看起来更干净

【问题讨论】:

  • 然后echo htmlspecialchars($contents)。您正在将另一个 html 页面的完整文本转储到当前页面的正文中,这意味着它将在当前页面的上下文中呈现为 html。如果您希望将 html 作为纯文本,则必须对 html 元字符进行编码,例如&amp;lt; -> &amp;lt;
  • 感谢 Marc 的回复。甚至 echo htmlspecialchars($contents);在第二个 div 中不显示任何内容,就像 print_r(htmlentities($contents));也没有任何错误
  • 然后执行var_dump($contents) 之类的操作,确保您确实收到了任何东西。 print_r 用于调试输出,但效果不佳。如果 f_g_c() 失败,则返回布尔值 false,它打印为长度为零的字符串。 var_dump 会告诉你类型/值,而不仅仅是字符串表示。请注意 print_r 和 var_dump 用于调试。如果您只想直接输出某些内容,请使用echo
  • @MarcB,试过 var_dump。不成功。在我的问题中更新
  • 我认为它至少会向您显示一个错误。错误输出是否打开?尝试将其放在 php 文件的顶部:ini_set('display_errors', 1); error_reporting(E_ALL); 然后再尝试htmlentitieshtmlspecialchars

标签: php file-get-contents


【解决方案1】:

您可以通过将所有&amp;lt; 实例转换为&amp;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>

另外,还有&lt;xmp&gt; 标签,但它已经过时了。 &lt;xmp&gt; 上的 Mozilla documentation 建议使用 &lt;pre&gt;&lt;code&gt; 代替。

【讨论】:

  • 谢谢特里。我无法修改抓取的 HTML 及其标签,因为在后续步骤中,我打算在分析输出后使用这些标签从中提取更多数据。截至目前,我被困在第一步:(
  • @SagnikPal 简单。如果要保持抓取的 HTML 完好无损,请将原始保持为 $rawHTML,但显示 $encodedHTML
  • 你拯救了这一天:)
  • @SagnikPal 很高兴我能帮上忙,你愿意接受我的回答吗?
  • 是的,我确实接受了答案。但是,由于我是这个网站的新手并且还没有 15 名声望,我收到一条消息,一旦我获得 15 名声望,我对您的答案的投票将公开可见。如果有任何其他方式可以接受您的回答,请告诉我。我会做的。
猜你喜欢
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 2013-05-19
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多