DOMElement :: innerHTML的原始内容

时间:2016-05-16 13:48:04

标签: php domdocument

在PHP中,我如何获得DOMElement的原始内容,就像JS innerHTML一样?

我尝试使用saveHTML()saveXML()迭代每个childNodes来模拟innerHTML,但它取代了代码,例如将<br />转换为<br><br/>(如果是XML版本)。

1 个答案:

答案 0 :(得分:0)

这可以通过可靠但可靠的方式来实现。通过将节点传递到其父文档的outerHTML方法,PHP与saveHTML()等效。由于此输出的格式正确且可转义,因此您可以轻松地从文本中剥离单个外部标签,而保留所需的innerHTTML

示例:

$dom = new DOMDocument;
$dom->loadHTML('<div><p with="scary<>\'&quot;" attrs=40 ok>Hello <em>World</em></div>');
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//p') as $p) {
    $innerHTML = preg_replace('@^<([^>\\s]+)[^>]*>(.*)</\\1>$@s', '$2', $dom->saveHTML($p));
    var_dump($p);
}

正则表达式的演示:https://regex101.com/r/yEVMQx/2

请注意,正则表达式上的s标志非常重要。