Проблема в том, что вы работаете со всем элементом
. Boxes является частью nodeValue тега привязки.
Если приведенная выше структура всегда одинакова, вы можете сделать что-то вроде
$ new_html = preg_replace ("##", "", $ f-> item (0) -> nodeValue);
В действительности, лучший способ сделать это - сбросить значение узла якоря, создать совершенно новый элемент и добавить его.
(рассмотрите этот код псевдо)
$inv_listitems = $invcontents->getElementsByTagName('li');
foreach ($inv_listitems as $f) {
$span = $invcontents->createElement("span");
$span->setAttribute("class", "highlight");
$span->nodeValue = $f->item(0)->nodeValue;
$f->appendChild($span);
}
echo $invcontents->saveHTML();
Вам нужно будет выполнить некоторое сопоставление там, а также сбросить значение ноды $ f, но, надеюсь, это сделает его немного более понятным.
Кроме того, не устанавливайте HTML в nodeValue напрямую, потому что он будет запускать htmlentities () для всех установленных вами HTML. Вот почему я создаю новый элемент выше. Если вам абсолютно необходимо установить HTML в nodeValue, вам следует создать DocumentFragment Object