В 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;
Результат:
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;
Результат:
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()
:
Удаление <br> в начале строки
$text = '<br><br>Тег <br> в начале строки.';
$text = preg_replace('/^(<br\s*?\/?>)+/i', '', $text);
echo $text;
Результат:
Тег <br> в начале строки.
Удаление <br> в конце строки
$text = 'Тег <br> в конце строки.<br><br>';
$text = preg_replace('/(<br\s*?\/?>)+$/i', '', $text);
echo $text;
Результат:
Тег <br> в конце строки.
Удаление <br> перед закрывающим тегом </p>
$text = '<p>Лишний <br> в конце параграфа.<br></p>';
$text = preg_replace('/(<br\s*?\/?>)+([\s+]{1,})?(<\/p>)$/i', '$3', $text);
echo $text;
Результат:
<p>Лишний <br> в конце параграфа.</p>
Еще момент, обычно в WYSIWYG редакторах пустая строка выполняется элементом <p> </p>
, следующий код удаляет данные переносы в конце текста.
$text = '
<p>Пустые строки в конце текста.</p>
<p> </p>
<p> </p>';
$text = preg_replace('/(<p> <\/p>[\s+]?)+$/i', '', $text);
$text = trim($text);
echo $text;
Результат:
<p>Пустые строки в конце текста.</p>
Удаление повторяющихся <br>
$text = 'Текст<br><br>с<br/><br/>множеством<br /><br />переносов<BR/><BR/>строк.';
$text = preg_replace('/(<br\s*?\/?>){1,}/i', '<br>', $text);
echo $text;
Результат:
Текст<br>с<br>множеством<br>переносов<br>строк.