Переносы строк и тег BR в PHP

В PHP за перенос текста отвечают управляющие символы \r (возврат каретки) и \n (перевод строки), причем в разных операционных системах (на которых работает сервер) они применяются в разных комбинациях:

  • GNU/Linux – \n;
  • Mac – \r;
  • Windows – \r\n.

Поэтому в место распространенного \r\n рекомендуется использовать константу PHP_EOL для кроссплатформенности кода.

С помощью функции str_replace():

$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Proin blandit magna eu tempus ullamcorper.
Sed porta justo sed nibh elementum condimentum.";

$text = str_replace(PHP_EOL, '<br>', $text);
echo $text;
PHP

Результат:

Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br>Proin blandit magna eu tempus ullamcorper.<br>Sed porta justo sed nibh elementum condimentum.

Функция nl2br() добавляет тег <br>, но оставляет символы переносов строк.

$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Proin blandit magna eu tempus ullamcorper.
Sed porta justo sed nibh elementum condimentum.";

$text = nl2br($text, false);
echo $text;
PHP

Результат:

Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br>
Proin blandit magna eu tempus ullamcorper.<br>
Sed porta justo sed nibh elementum condimentum.

Если через функцию nl2br() пропустить текст несколько раз, то количество <br> с каждым разом будет увеличиваться и получится следующий результат:

Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br><br>
Proin blandit magna eu tempus ullamcorper.<br><br>
Sed porta justo sed nibh elementum condimentum.

Чтобы этого избежать нужно перед вызовом nl2br() применять обратную функцию br2nl():

function br2nl($text)
{
	return  preg_replace('/<br\\s*?\/??>/i', '', $text);
}
PHP

Удаление <br> в начале строки

$text = '<br><br>Тег <br> в начале строки.';

$text = preg_replace('/^(<br\s*?\/?>)+/i', '', $text);
echo $text;
PHP

Результат:

Тег <br> в начале строки.

Удаление <br> в конце строки

$text = 'Тег <br> в конце строки.<br><br>';

$text = preg_replace('/(<br\s*?\/?>)+$/i', '', $text);
echo $text;
PHP

Результат:

Тег <br> в конце строки.

Удаление <br> перед закрывающим тегом </p>

$text = '<p>Лишний <br> в конце параграфа.<br></p>';

$text = preg_replace('/(<br\s*?\/?>)+([\s+]{1,})?(<\/p>)$/i', '$3', $text);
echo $text;
PHP

Результат:

<p>Лишний <br> в конце параграфа.</p>

Еще момент, обычно в WYSIWYG редакторах пустая строка выполняется элементом <p>&nbsp;</p>, следующий код удаляет данные переносы в конце текста.

$text = '
<p>Пустые строки в конце текста.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>';

$text = preg_replace('/(<p>&nbsp;<\/p>[\s+]?)+$/i', '', $text);
$text = trim($text);
echo $text;
PHP

Результат:

<p>Пустые строки в конце текста.</p>

Удаление повторяющихся <br>

$text = 'Текст<br><br>с<br/><br/>множеством<br /><br />переносов<BR/><BR/>строк.';

$text = preg_replace('/(<br\s*?\/?>){1,}/i', '<br>', $text);
echo $text;
PHP

Результат:

Текст<br>с<br>множеством<br>переносов<br>строк.
14.01.2021
11521

Комментарии

, чтобы добавить комментарий.

Другие публикации

Таблица символов ASCII
Список из 256 символов и их коды в ASCII.
406846
+34
Очистка данных из форм в PHP
Для предотвращения XSS, SQL-инъекций и других атак, данные полученные из форм нужно чистить. Простое экранирования кавычек не достаточно, нужен комплексный подход по типу данных.
6394
+4
Contenteditable – текстовый редактор
Если добавить атрибут contenteditable к элементу, его содержимое становится доступно для редактирования пользователю, а...
21991
+25
Преобразование строк в массив PHP
Примеры преобразования строк текста в массив по разным разделителям.
4296
+3
Как скрыть лишний текст в блоке
Имеем несколько колонок с разным по длине текстом, нужно сделать их одинаковой высоты и скрыть лишнее.
19591
0
Преобразование цветов HEX и RGB в PHP
Несколько примеров как перевести цвета из HEX в RGB и обратно с помощью PHP.
9664
+1