Как осуществить удаление между тегами?

Столкнулся с ситуацией, когда нужно между двумя тегами удалить br , никак не получается составить регулярные выражения, буду весьма благодарен, если кто поможет.
Вот пример :
<br />
<ul><br />
	<li></li><br />
	<li></li><br />
</ul>
<br />

Должно получиться:
<br />
<ul>
	<li></li>
	<li></li>
</ul>
<br />
  • Вопрос задан
  • 2497 просмотров
Решения вопроса 1
$pattern = '/><br\ \/>(\s+|\t+)?\</g';
$replacement = '>$1<';
preg_replace($pattern, $replacement);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
xpath единственный достойный вариант.

Проходите по DOM дереву, для каждого элемента смотрите элемент родитель. Если это ul/ol, и наш текущий тег не li, удаляем.

Это очень упрощенный вариант, но можно добавить кучи правил и получить довольно эффективный фильтр.

Можно так же воспользоваться штуками типа HTMLPurifier.

А что до регулярок - не стоит вообще парсить xml/html регулярками.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы