Nl2br: примеры (PHP)
nl2br(string $string, bool $use_xhtml = true): stringФункция nl2br в PHP
Функция nl2br() преобразует символы новой строки (\n, \r\n, \r) в HTML-теги <br> или <br />. Основное применение - сохранение разметки текста, введенного пользователем, при выводе в HTML-формате. Без такой обработки текст, содержащий переносы строк, в браузере отображается как одна сплошная строка.
Функция принимает два параметра:
- $string (обязательный) - строка, в которой требуется преобразовать символы новой строки.
- $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 нет прямой аналогии, но замену можно выполнить с помощью метода replace() или модуля html.
Код:
text = "Первая строка\nВторая строка"
result = text.replace('\n', '<br>')
print(result)Результат:
Первая строка<br>Вторая строка
В 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 для замены символов используется функция 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 />
Вторая строка
--------------------------------------------------
<script>alert('xss');</script><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-формат. Функция стабильна и обратно совместима.
Расширенные примеры
Код:
$text = "Смешанные переносы:\n\r\n\rС новой строки";
$processed = nl2br($text);
echo $processed;
// nl2br корректно обрабатывает \n, \r\n, \rКод:
$longText = "Очень длинная строка, которую нужно разбить по словам.";
$wrapped = wordwrap($longText, 20, "\n");
echo nl2br($wrapped);Результат:
Очень длинная строка,<br /> которую нужно разбить<br /> по словам.
Код:
$fileContent = file_get_contents('log.txt');
$htmlContent = nl2br(htmlspecialchars($fileContent));
echo '<div class="log">' . $htmlContent . '</div>';Код (упрощенный пример):
function formatText($text) {
return nl2br(htmlspecialchars(trim($text)));
}
// В шаблоне:
// <p><?= formatText($userComment) ?></p>Код:
$text = "Много\n\n\nпереносов\n\nв тексте";
// Заменяем 2 и более переноса на один
$filtered = preg_replace('/\n{2,}/', "\n\n", $text);
echo nl2br($filtered);