📜  如何使用PHP将 HTML 标签显示为纯文本(1)

📅  最后修改于: 2023-12-03 15:23:59.996000             🧑  作者: Mango

如何使用 PHP 将 HTML 标签显示为纯文本

有时候,我们想要将一段 HTML 代码中的所有标签都去除掉,只留下纯文本信息。这在 PHP 中是非常容易实现的。下面就是一些方法:

方法一:使用 strip_tags() 函数

strip_tags() 函数可以将一个字符串中的 HTML 和 PHP 标签去除掉,只留下纯文本。例如:

$originalString = "<p>Hello <strong>world</strong>!</p>";
$strippedString = strip_tags($originalString);
echo $strippedString;

这将输出:

Hello world!

注意:strip_tags() 函数会将所有标签都去除掉,因此这种方法并不适用于需要保留某些标签的情况。

方法二:使用 htmlspecialchars() 和 preg_replace() 函数

如果我们想要保留一些 HTML 标签,可以使用 htmlspecialchars() 函数将这些标签转义成纯文本,并使用 preg_replace() 函数去掉这些标签。例如,假设我们想要保留 <a><img> 标签:

$originalString = "<p>Hello <a href='https://example.com'>world</a>! <img src='example.jpg' alt='example'></p>";
$escapedString = htmlspecialchars($originalString, ENT_QUOTES, 'UTF-8');
$strippedString = preg_replace('/&(lt|gt|amp|#039|#034);/', '', $escapedString);
echo $strippedString;

这将输出:

<p>Hello <a href='https://example.com'>world</a>! <img src='example.jpg' alt='example'></p>

注意:htmlspecialchars() 函数将 HTML 的特殊字符(如 <>& 等)转义成实体。第二个参数 ENT_QUOTES 表示将单引号和双引号也进行转义。第三个参数 UTF-8 表示使用 UTF-8 编码。preg_replace() 函数使用正则表达式将转义后的特殊字符去掉。在上面的例子中,我们刚好将特殊字符都转义成了实体,因此使用 preg_replace() 函数能够达到去掉标签的效果。

方法三:使用 DOMDocument 类

DOMDocument 类是 PHP 内置的一个类,可以用来处理 XML 和 HTML 文档。我们可以使用这个类将 HTML 代码解析成 DOM 树形结构,然后再遍历这个树形结构,去掉其中的标签。例如:

$originalString = "<p>Hello <strong>world</strong>!</p>";
$dom = new DOMDocument();
$dom->loadHTML($originalString, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
$nodesToRemove = $xpath->query('//body/*');
foreach ($nodesToRemove as $node) {
    $node->parentNode->removeChild($node);
}
$strippedString = $dom->saveHTML();
echo $strippedString;

这将输出:

Hello world! 

注意:利用 DOM 树形结构去掉标签的方法可以保留一些标签,并且可以更灵活地处理 HTML 代码。在上面的例子中,我们使用 DOMDocument::loadHTML() 方法将 HTML 代码解析成 DOM 树形结构,在 DOMXPath::query() 方法中使用 XPath 查询语言来找到要去除的标签,然后在遍历时使用 DOMElement::parentNodeDOMElement::removeChild() 方法来去掉标签。最后,我们使用 DOMDocument::saveHTML() 方法将去掉标签后的 DOM 树形结构保存为 HTML 代码。