将使用 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('<','<',$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 的建议。输出看起来更清晰
您可以简单地通过将 <
的所有实例转换为 <
来阻止对 HTML 标签的评估。示例:
<?php
$rawHTML = '<html><h1>This is a Title</h1></html>';
$encodedHTML = str_replace('<','<',$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>
代替。
我阅读了一些关于在页面中将 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.
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('<','<',$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 的建议。输出看起来更清晰
您可以简单地通过将 <
的所有实例转换为 <
来阻止对 HTML 标签的评估。示例:
<?php
$rawHTML = '<html><h1>This is a Title</h1></html>';
$encodedHTML = str_replace('<','<',$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>
代替。