@Bestolkovy

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

Добрый день!

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

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

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

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


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

Как написать функцию, чтобы были обработаны все контейнеры <pre> на странице и остальной контент был на месте?
  • Вопрос задан
  • 359 просмотров
Решения вопроса 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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