一尘不染

如何将HTML插入PHP DOMNode?

html

有什么方法可以将HTML模板插入到现有DOMNode中,而无需对内容进行编码?

我试图做到这一点:

$dom->createElement('div', '<h1>Hello world</h1>');
$dom->createTextNode('<h1>Hello world</h1>');

输出几乎相同,唯一的区别是第一个代码会将其包装在div中。我试图从字符串加载HTML,但是我不知道如何将其主体内容附加到另一个DOMDocument中。

在javascript中,此过程似乎非常简单明显。


阅读 203

收藏
2020-05-10

共1个答案

一尘不染

它与另一个DOMDocument一起用于解析HTML代码。但是您需要先将节点导入主文档,然后才能在其中使用它们:

$newDiv = $dom->createElement('div');
$tmpDoc = new DOMDocument();
$tmpDoc->loadHTML($str);
foreach ($tmpDoc->getElementsByTagName('body')->item(0)->childNodes as $node) {
    $node = $dom->importNode($node, true);
    $newDiv->appendChild($node);
}

并作为方便的功能:

function appendHTML(DOMNode $parent, $source) {
    $tmpDoc = new DOMDocument();
    $tmpDoc->loadHTML($source);
    foreach ($tmpDoc->getElementsByTagName('body')->item(0)->childNodes as $node) {
        $node = $parent->ownerDocument->importNode($node, true);
        $parent->appendChild($node);
    }
}

然后,您可以简单地执行以下操作:

$elem = $dom->createElement('div');
appendHTML($elem, '<h1>Hello world</h1>');
2020-05-10