📅  最后修改于: 2023-12-03 15:23:59.996000             🧑  作者: Mango
有时候,我们想要将一段 HTML 代码中的所有标签都去除掉,只留下纯文本信息。这在 PHP 中是非常容易实现的。下面就是一些方法:
strip_tags()
函数可以将一个字符串中的 HTML 和 PHP 标签去除掉,只留下纯文本。例如:
$originalString = "<p>Hello <strong>world</strong>!</p>";
$strippedString = strip_tags($originalString);
echo $strippedString;
这将输出:
Hello world!
注意:
strip_tags()
函数会将所有标签都去除掉,因此这种方法并不适用于需要保留某些标签的情况。
如果我们想要保留一些 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 类是 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::parentNode
和DOMElement::removeChild()
方法来去掉标签。最后,我们使用DOMDocument::saveHTML()
方法将去掉标签后的 DOM 树形结构保存为 HTML 代码。