PHP удалить теги, соответствующие шаблону или шаблону подстановочного знака - PullRequest
0 голосов
/ 10 июля 2020

Как я могу использовать preg_replace или аналогичный для поиска и замены всех экземпляров, в которых теги соответствуют следующему:

У меня много экземпляров таких тегов в моем контенте:

<span style="background-color: rgb(255, 255, 0);"></span>
<span style="background-color: rgb(125, 125, 0);"></span>
<span style="*"></span> (background-color could be anything...)

Как могу ли я удалить только те теги, где ничего нет между тегами span, но оставить другие, где есть содержимое между тегами span.

Я хочу удалить эти ...

<span style="background-color: rgb(255, 255, 0);"></span> (background-color is wild)

Я хочу оставить эти ...

<span style="background-color: rgb(255, 255, 0);">Content...</span>

1 Ответ

0 голосов
/ 10 июля 2020

Как упоминалось в комментариях, DOMDocument - лучший инструмент для этой работы. Вы захватываете все span элементы, и если какой-либо элемент span не имеет дочерних узлов (включая текстовые узлы), то удаляйте его из DOM. В итоге вам нужно saveHTML, чтобы выгрузить строку HTML.

Фрагмент:

<?php

$html = '
<span style="background-color: rgb(255, 255, 0);">a</span>
<span style="background-color: rgb(125, 125, 0);">b<b>ldkf</b></span>
<span style="*"></span>';

$dom = new DOMDocument();
$dom->loadHTML($html);

foreach($dom->getElementsByTagName('span') as $span_node){
    if($span_node->childNodes->length == 0){ // if no child nodes, then remove it
        $span_node->parentNode->removeChild($span_node);
    }
}

echo $dom->saveHTML();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...