PHP DOMDocument用HTML字符串替换DOMElement子节点

And*_*ter 8 php dom domdocument

使用PHP我试图获取从WYSIWYG编辑器传递的HTML字符串,并用新的HTML替换预加载的HTML文档中的元素的子元素.

到目前为止,我正在加载文档,标识我想要通过ID更改的元素,但是将HTML转换为可以放在DOMElement中的内容的过程正在躲避我.

libxml_use_internal_errors(true);

$doc = new DOMDocument();
$doc->loadHTML($html);

$element = $doc->getElementById($item_id);
if(isset($element)){
    //Remove the old children from the element
    while($element->childNodes->length){
        $element->removeChild($element->firstChild);
    }

    //Need to build the new children from $html_string and append to $element
}
Run Code Online (Sandbox Code Playgroud)

Key*_*van 13

如果HTML字符串可以解析为XML,则可以执行此操作(清除所有子节点的元素后):

$fragment = $doc->createDocumentFragment();
$fragment->appendXML($html_string);
$element->appendChild($fragment);
Run Code Online (Sandbox Code Playgroud)

如果$ html_string无法解析为XML,则会失败.如果是这样,你将不得不使用不那么严格的loadHTML() - 但它会在片段周围添加你必须去除的元素.

与PHP不同,Javascript具有innerHTML属性,允许您非常轻松地执行此操作.我需要类似于项目的东西,所以我扩展了PHP的DOMElement以包含类似Javascript的innerHTML访问.

有了它,您可以访问innerHTML属性并像在Javascript中一样进行更改:

echo $element->innerHTML;
$elem->innerHTML = '<a href="http://example.org">example</a>';
Run Code Online (Sandbox Code Playgroud)

资料来源:http://www.keyvan.net/2012/11/php-domdocument-replace-domelement-child-with-html-string/