如何使用 PHP 的 DOMDocument 从 HTML 字符串中剥离标签(及其内容)?

我想从 HTML 字符串中删除所有链接及其内容。


所以这个…… <a href="#">LINK1</a> and <i>also</i> <a href="#">LINK2</a>应该变成这样:and <i>also</i>


下列 ...


$html = '<a href="#">LINK1</a> - and <i>also</i> <a href="#">LINK2</a>';


$dom = new DOMDocument;

$dom->preserveWhiteSpace = false;

$dom->validateOnParse = false;

$dom->resolveExternals = false;

$dom->substituteEntities = false;

$dom->loadHTML( $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );


$list = $dom->getElementsByTagName('a');

while ($list->length > 0) {

    $p = $list->item(0);

    $p->parentNode->removeChild($p);

}

$html_new = $dom->saveHTML();


echo htmlentities($html);

echo '<br><br><hr><br>';

echo htmlentities($html_new);

$html...除非我包裹在 a 中否则不起作用<div>,但后来我有了<div> and <i>also</i> </div>。我可以用来substr去掉结果中的前 5 个和后 6 个字符,但这太愚蠢了,而且我的脸已经因为我为了弄清楚上面的内容而忍受的所有脸部手掌而感到太酸痛了。


关于如何在不使用 regex或诉诸facepalmy hacks的情况下从字符串中删除所有标签有什么建议吗?


凤凰求蛊
浏览 35回答 1
1回答

慕斯王

我的解决方案是简单地将我的代码 nippet 包装在 a 中div,然后使用substr将其删除。似乎是通过 DOMDocument 处理有效的内联 HTML 片段(而不是整个 DOM)的可接受的解决方法。$html = '<a href="#">LINK1</a> - and <i>also</i> <a href="#">LINK2</a>';$dom = new DOMDocument;$dom->preserveWhiteSpace = false;$dom->validateOnParse = false;$dom->resolveExternals = false;$dom->substituteEntities = false;$dom->loadHTML( '<div>'.$html.'</div>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );$list = $dom->getElementsByTagName('a');while ($list->length > 0) {    $p = $list->item(0);    $p->parentNode->removeChild($p);}$result = substr($dom->saveHTML(), 5, -6);
打开App,查看更多内容
随时随地看视频慕课网APP