在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<>''"" 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
标志至关重要。