gpt4 book ai didi

PHP DOM 文档 : Get inner HTML of node

转载 作者:行者123 更新时间:2023-12-05 06:36:35 25 4
gpt4 key购买 nike

将 HTML 加载到 <textarea> 中时, 我打算区别对待不同类型的链接。考虑以下链接:

  1. <a href="http://stackoverflow.com">http://stackoverflow.com</a>
  2. <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>以避免破坏可能存在的。

最后,载入 nodeValue rootNode 或 substr() .

$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>

关于PHP DOM 文档 : Get inner HTML of node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48929167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com