DOMElement::innerHTML的原始内容


Raw content of DOMElement::innerHTML

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

我尝试在每个childNodes上迭代saveHTML()saveXML()来模拟innerHTML,但它取代了将<br />转换为<br><br/>(在XML版本的情况下)之类的代码。

这可以通过一种简单但可靠的方式实现。PHP通过将节点传递给其父文档的saveHTML()方法,实现了相当于outerHTML的功能。由于此输出格式良好,并且已转义,因此可以轻松地从文本中剥离单个外部标记,从而留下所需的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);
}

regex演示:https://regex101.com/r/yEVMQx/2

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