Nl2br: примеры (PHP)

Функция nl2br в PHP - преобразование переносов строк в теги BR
Раздел: HTML
nl2br(string $string, bool $use_xhtml = true): string

Функция nl2br в PHP

Функция nl2br() преобразует символы новой строки (\n, \r\n, \r) в HTML-теги <br> или <br />. Основное применение - сохранение разметки текста, введенного пользователем, при выводе в HTML-формате. Без такой обработки текст, содержащий переносы строк, в браузере отображается как одна сплошная строка.

Аргументы функции

Функция принимает два параметра:

  1. $string (обязательный) - строка, в которой требуется преобразовать символы новой строки.
  2. $use_xhtml (необязательный) - булево значение, определяющее вид тега <br>. При значении true (по умолчанию) функция возвращает тег в XHTML-формате (<br />). При false генерируется HTML-совместимый тег (<br>).

Примеры использования nl2br

Базовый пример

Код:

$text = "Первая строка\nВторая строка\r\nТретья строка";
echo nl2br($text);

Результат:

Первая строка<br />
Вторая строка<br />
Третья строка
Использование второго аргумента

Код:

$text = "Строка 1\nСтрока 2";
echo nl2br($text, false); // Используем HTML-формат

Результат:

Строка 1<br>
Строка 2
Обработка текста из формы

Код:

// Предположим, $_POST['comment'] = "Привет!\nКак дела?";
$user_input = $_POST['comment'] ?? '';
$safe_output = nl2br(htmlspecialchars($user_input));
echo $safe_output;

Результат:

Привет!<br />
Как дела?

Похожие функции в PHP

  • str_replace() - позволяет выполнять более сложные замены. Например, заменить все переносы на теги <p>. Эта функция менее специализирована, но более гибкая.
  • preg_replace() - применяется для замены по регулярному выражению. Полезно при необходимости фильтрации или сложных преобразований строк, например, замены нескольких последовательных переносов на один тег.
  • htmlspecialchars() - часто используется вместе с nl2br() для экранирования HTML-символов и предотвращения XSS-атак. Сначала применяют htmlspecialchars(), затем nl2br().

Функцию nl2br() предпочтительнее использовать для простой и быстрой конвертации переносов строк в брауфере. Для сложных сценариев обработки текста подойдут str_replace() или preg_replace().

Аналоги функции в других языках

Python

В Python нет прямой аналогии, но замену можно выполнить с помощью метода replace() или модуля html.

Код:

text = "Первая строка\nВторая строка"
result = text.replace('\n', '<br>')
print(result)

Результат:

Первая строка<br>Вторая строка
JavaScript

В JavaScript для отображения текста с переносами можно использовать CSS-свойство white-space: pre-line; или замену через String.prototype.replace().

Код:

let text = "Строка 1\nСтрока 2";
let html = text.replace(/\n/g, '<br>');
console.log(html);

Результат:

Строка 1<br>Строка 2
MySQL

В запросах MySQL для замены символов используется функция REPLACE().

Код (запрос):

SELECT REPLACE(column_name, '\n', '<br>') FROM table_name;

Основное отличие от PHP-функции - необходимость явно указывать символы для замены и результат работы в контексте SQL-запроса.

Типичные ошибки

Неправильный порядок обработки

Распространенная ошибка - сначала применение nl2br(), а потом htmlspecialchars(). Это приводит к экранированию тегов <br> и их отображению как текста.

Код с ошибкой:

$text = "<script>alert('xss');</script>\nВторая строка";
echo nl2br(htmlspecialchars($text)); // Правильно
echo "<hr>";
echo htmlspecialchars(nl2br($text)); // Ошибка

Результат:

<script>alert('xss');</script><br />
Вторая строка
--------------------------------------------------
&lt;script&gt;alert('xss');&lt;/script&gt;<br />
Вторая строка
Двойные теги

Если исходный текст уже содержит HTML-теги <br>, функция добавит еще один, что может привести к двойным переносам.

Код:

$text = "Строка 1<br>Строка 2";
echo nl2br($text);

Результат:

Строка 1<br><br />
Строка 2

Изменения в версиях PHP

В PHP 8.2 и 8.3 значительных изменений в работе функции nl2br() не было. Начиная с PHP 4.0.5, второй параметр $use_xhtml по умолчанию имеет значение true, что соответствует XHTML-формату. В более ранних версиях использовался HTML-формат. Функция стабильна и обратно совместима.

Расширенные примеры

Обработка текста с различными типами переносов

Код:

Пример php
$text = "Смешанные переносы:\n\r\n\rС новой строки";
$processed = nl2br($text);
echo $processed;
// nl2br корректно обрабатывает \n, \r\n, \r
Комбинирование с функцией wordwrap

Код:

Пример php
$longText = "Очень длинная строка, которую нужно разбить по словам.";
$wrapped = wordwrap($longText, 20, "\n");
echo nl2br($wrapped);

Результат:

Очень длинная строка,<br />
которую нужно разбить<br />
по словам.
Сохранение переносов в текстовом файле

Код:

Пример php
$fileContent = file_get_contents('log.txt');
$htmlContent = nl2br(htmlspecialchars($fileContent));
echo '<div class="log">' . $htmlContent . '</div>';
Использование в шаблонизаторе

Код (упрощенный пример):

Пример php
function formatText($text) {
    return nl2br(htmlspecialchars(trim($text)));
}
// В шаблоне:
// <p><?= formatText($userComment) ?></p>
Фильтрация лишних переносов

Код:

Пример php
$text = "Много\n\n\nпереносов\n\nв тексте";
// Заменяем 2 и более переноса на один
$filtered = preg_replace('/\n{2,}/', "\n\n", $text);
echo nl2br($filtered);

PHP nl2br function comments

En
Nl2br Inserts HTML line breaks before all newlines in a string