我想從 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);
- 1 回答
- 0 關注
- 167 瀏覽
添加回答
舉報
0/150
提交
取消