为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
凤凰求蛊 2024-01-19 09:58:47
我想从 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的情况下从字符串中删除所有标签有什么建议吗?
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

我的解决方案是简单地将我的代码 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);


查看完整回答
反对 回复 2024-01-19
  • 1 回答
  • 0 关注
  • 30 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信