在PHP中,我如何获得DOMElement
的原始内容,就像JS innerHTML
一样?
我尝试使用saveHTML()
或saveXML()
迭代每个childNodes
来模拟innerHTML
,但它取代了代码,例如将<br />
转换为<br>
或<br/>
(如果是XML版本)。
答案 0 :(得分:0)
这可以通过可靠但可靠的方式来实现。通过将节点传递到其父文档的outerHTML
方法,PHP与saveHTML()
等效。由于此输出的格式正确且可转义,因此您可以轻松地从文本中剥离单个外部标签,而保留所需的innerHTTML
。
示例:
$dom = new DOMDocument;
$dom->loadHTML('<div><p with="scary<>\'"" 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
标志非常重要。