我在这里寻找一个合适的答案,但找不到任何合理的答案。我从某个类的元素中抓取文本并加粗所有大写字母。我可以获取文本并应用我的更改但是当插回到DOMNode时,PHP决定重新格式化标记,使其无法用作HTML。如果你转储$ replacement字符串就可以了,它被保存到节点时被剥离了。有没有人有合理的解决方案??
我应该提一下,我正在尝试替换此节点中当前不附加的文本。
$dom = new DOMDocument();
$dom->loadHTML($output);
$search = new DomXPath($dom);
$class = "lead";
$nodes = $search->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $class ')]");
$leadContent = $nodes[0]->nodeValue;
$replaced = preg_replace('/([A-Z])/', '<strong>$0</strong>', $leadContent);
$nodes[0]->nodeValue = $replaced;
$output = $dom->saveHTML();
答案 0 :(得分:1)
使用文档片段找到解决方案,以防有人感兴趣。
刚删除节点中的当前文本并替换为文档片段。遍历引导类的每个节点以检查它是否也是段落标记。
$dom->loadHTML($output);
$search = new DomXPath($dom);
$lead = "lead";
$nodes = $search->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $lead ')]");
foreach( $nodes as $node )
{
if( $node->tagName == "p" )
{
$leadClass = $node->nodeValue;
$replaced = preg_replace('/([A-Z])/', '<strong>$0</strong>', $leadClass);
$node->nodeValue = '';
$temp = $dom->createDocumentFragment();
$temp->appendXML($replaced);
$node->appendChild($temp);
}
}
$output = $dom->saveHTML();