[英]PHP DOMDocument: Get inner HTML of node
將 HTML 加載到<textarea>
,我打算以不同的方式對待不同類型的鏈接。 考慮以下鏈接:
<a href="http://stackoverflow.com">http://stackoverflow.com</a>
<a href="http://stackoverflow.com">StackOverflow</a>
當鏈接內的文本與其href
屬性匹配時,我想刪除 HTML,否則 HTML 保持不變。
這是我的代碼:
$body = "Some HTML with a <a href=\"http://stackoverflow.com\">http://stackoverflow.com</a>";
$dom = new DOMDocument;
$dom->loadHTML($body, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
foreach ($dom->getElementsByTagName('a') as $node) {
$link_text = $node->ownerDocument->saveHTML($node->childNodes[0]);
$link_href = $node->getAttribute("href");
$link_node = $dom->createTextNode($link_href);
$node->parentNode->replaceChild($link_node, $node);
}
$html = $dom->saveHTML();
上面代碼的問題是DOMDocument
把我的HTML封裝成一個段落標簽:
<p>Some HTML with a http://stackoverflow.com</p>
我如何讓它只返回該段落的內部 HTML?
您需要有一個根節點才能擁有有效的 DOM 文檔。
我建議您添加一個根節點<div>
以避免破壞可能存在的節點。
最后,加載 rootNode 或substr()
的nodeValue
。
$body = "Some HTML with a <a href=\"http://stackoverflow.com\">http://stackoverflow.com</a>";
$body = '<div>'.$body.'</div>';
$dom = new DOMDocument;
$dom->loadHTML($body, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
foreach ($dom->getElementsByTagName('a') as $node) {
$link_text = $node->ownerDocument->saveHTML($node->childNodes[0]);
$link_href = $node->getAttribute("href");
$link_node = $dom->createTextNode($link_href);
$node->parentNode->replaceChild($link_node, $node);
}
// or probably better :
$html = $dom->saveHTML() ;
$html = substr($html,5,-7); // remove <div>
var_dump($html); // "Some HTML with a http://stackoverflow.com"
這是有效的輸入字符串是:
<p>Some HTML with a <a href=\"http://stackoverflow.com\">http://stackoverflow.com</a></p>
輸出:
<p>Some HTML with a http://stackoverflow.com</p>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.