laimas,
Да, не работает... Ваша функция работает отлично, но, я как понял, мы вначале расставляем тег br везде, а потом вырезаем их из тега pre? Я это реализовал ещё месяц назад, таким образом: // Расставляем в конце каждой строки тег <br> $content = preg_replace( '/\r?\n/miu', "<br>\r\n", $content ); // Убираем все теги <br>, которые идут после открывающего тега <div> $content = preg_replace( '/((\<div[^\>]*?\>)<br>)/miu', "$2", $content ); // Убираем все теги <br>, которые идут после тега <hr> $content = preg_replace( '/((\<hr[^\>]*?\>)\<br\>)/miu', "$2", $content ); // Убираем все теги <br>, которые находятся внутри контейнера <pre>...</pre> $content = preg_replace_callback( '/\<pre[^\>]*?\>([\s\S]*?)\<\/pre\>/miu', function( $matches ) { return preg_replace( '/\<br\>/miu', '', $matches[0] ); }, $content ); // Если пустых строк с тегом <br>, больше чем 1 подряд, убираем лишние и оставляем только одну $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); Кстати, оцените эту красоту. Просто уже месяц я думаю над вопросом, как сделать аналог как в CSS .content :not(pre):not(div) на PHP. Эта всё, чтобы сделать автоматически расстановку параграфов в контенте, понимаете? Ведь WordPress как-то расставляет их сам. Вот я и пишу лёгкий и простой аналог парсера для людей. Совершенно бесплатно. |
Цитата:
Поэтому "оцените эту красоту", это не красота, а пустые и неоправданные затраты. :) Ну а если говорить о парсере html-кода, то уже есть отличные классы готовые. Если расставить автоматом параграфы в тексте присылаемом клиентом, что может быть проще - примем во внимание, что параграф это двойной перевод строки, тогда: echo '<p>'.implode('</p><p>', preg_split('/[\r\n]{2}|\n{2}/', htmlspecialchars($string), null, PREG_SPLIT_NO_EMPTY)).'</p>'; |
laimas,
Спасибо большое, за ваши советы. Не буду больше вас мучить. Надо углубляться в изучение. Хочу задать последний вопрос, можно ли вот этот кусок кода, написать одной строчкой? // Если пустых строк с тегом <br>, больше чем 1 подряд, убираем лишние и оставляем только одну $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); $content = preg_replace( '/(^\<br\>\r?\n^\<br\>\r?\n)/miu', "<br>\r\n", $content ); То есть два и более подряд идущих тега: <br> <br> <br> заменять на один: <br> Большое спасибо за помощь! |
Цитата:
А если шерстить <br>, то зачем столько идентичных повторений? Ну и меняйте если более двух - '#<br[^>]*>{2,}#'. А такой \<br\>\r\n\<br\>\r\n бардак может получится, если только самому сильно захотеть. :) Да еще и <br\> - это из какой спецификации? PS. И я уже говорил, что "англицкий" он и в Африке "англицкий", проверьте этот пример в UTF: $s = 'Рус Lat Pyc'; echo preg_replace('/Lat/', 'Eng', $s); Как видите и без модификатора u проблем не будет. Вы шерстите теги, переносы, которые в многабайтной кодировке будут представлены также одним байтом. То же самое и с функциями строк - если использовать многие из них для поиска в UTF строке национального символа, то получим неверный результат, и надо использовать функции для работы с многобайтной кодировкой. Но если мы их используем для поиска не национальных символов, то проблем не будет. |
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 01:24. |