PHP 中的 DOMNode->replaceChild() 不会替换所有相关的所有相关子节点,而仅替换第一个

问题描述 投票:0回答:1
php dom
1个回答
0
投票

当您使用 replaceChild() 更改节点树时,引用也会更改,因此 foreach 可能会提前终止,因为 getElementsByTagName() 返回一个 Iterator,因此它是动态的。

我建议你将 getElementsByTagName() 返回的节点固定到一个数组中,然后遍历该数组:

// .....
$doc->loadHTML(mb_convert_encoding($htmlstr, 'HTML-ENTITIES', 'UTF-8'));

$brsArray = iterator_to_array($brs, true);

foreach ($brsArray as $node) {
    //.....
© www.soinside.com 2019 - 2024. All rights reserved.