替换现有DOMNode中的HTML

时间:2015-01-21 20:13:46

标签: php

我在这里寻找一个合适的答案,但找不到任何合理的答案。我从某个类的元素中抓取文本并加粗所有大写字母。我可以获取文本并应用我的更改但是当插回到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();

1 个答案:

答案 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();