Задать вопрос
@Bestolkovy

Как удалить теги br?

Добрый день!

Не могу удалить теги <br> находящиеся внутри контейнера <pre>...</pre>.

Пытаюсь сделать так:

preg_match( '/(<pre[^>]*?>([\s\S]*?)<\/pre>)/miu', $content, $matches );

$content = preg_replace( '/<br>/miu', '', $matches[1] );


Но на выходе получаю только содержимое самого первого контейнера <pre> и вырезанный весь остальной контент...

Как написать функцию, чтобы были обработаны все контейнеры <pre> на странице и остальной контент был на месте?
  • Вопрос задан
  • 371 просмотр
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
riot26
@riot26
<:З )~~
Проверьте так:
$content = preg_replace_callback(
    '/<pre>.*?<\/pre>/is',
	function ($m) {
		return preg_replace('/\s?<br>\s?/is', ' ', $m[0]);
	},
	$content
);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
В matches у вас массив с содержимым всех pre найденных на странице, а вы используете только первый.
Но даже если вы обработаете весь список - это проблему не решит, т.к. потерятется тот код, который не попал в pre, например.

И вообще, парсить большие куски HTML регулярками -
плохая идея


Лучше взять какой-нибудь html sanitizer, или Zend_DOM_Query, или DOMDocument, или другой инструмент, который предназначен для обработки HTML.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽