W3docs

nl2br()

Статья о функции PHP nl2br(), которая вставляет HTML-переносы строк перед каждым символом новой строки в строке. Полезна для отображения текста.

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

В этой главе рассматриваются синтаксис, параметр $is_xhtml, то, что nl2br() делает (и не делает) со строкой, типичный сценарий использования с пользовательским вводом и важный аспект безопасности, который нельзя игнорировать.

Синтаксис

nl2br(string $string, bool $use_xhtml = true): string
ПараметрОписание
$stringВходная строка для обработки. Обязательный.
$use_xhtmlНеобязательный. Определяет, использовать ли XHTML-совместимые теги <br />. По умолчанию true. При значении false используются обычные теги <br>.

Функция возвращает новую строку с вставленными переносами; строки PHP неизменяемы, поэтому исходная $string остаётся нетронутой.

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

php— editable, runs on the server

Вывод (необработанный HTML, который получает браузер):

Hello<br />
World!

Обратите внимание: исходный символ \n по-прежнему присутствуетnl2br() добавляет <br /> перед символом новой строки, а не заменяет его. Это сделано намеренно: исходный текст остаётся удобочитаемым при просмотре исходного кода страницы, а <br /> обеспечивает видимый перенос строки.

Управление стилем тега с помощью $use_xhtml

Передайте false в качестве второго аргумента, чтобы получить теги <br> в стиле HTML5 вместо самозакрывающейся формы XHTML:

<?php
echo nl2br("Line 1\nLine 2", false);
?>

Вывод:

Line 1<br>
Line 2

Используйте <br /> (по умолчанию) для документов XHTML или XML; обе формы допустимы в HTML5, поэтому значение по умолчанию работает практически везде.

Реальный сценарий использования: пользовательский ввод

Функция незаменима при выводе текста, введённого пользователем в поле <textarea>. Браузеры игнорируют переносы строк, которые вводит пользователь, поэтому без nl2br() многоабзацный комментарий отображается одним блоком. Однако существует критически важный порядок действий: сначала экранирование, затем преобразование переносов. Если применить nl2br() к необработанному вводу, переносы строк будут защищены, но останется уязвимость XSS, поскольку nl2br() не экранирует HTML — она только добавляет теги <br>.

<?php
$comment = "Hi there\nThanks for the great post!";

// Correct order: escape the HTML, THEN convert newlines.
echo nl2br(htmlspecialchars($comment));
?>

htmlspecialchars() нейтрализует символы <, > или &, введённые пользователем, а nl2br() затем добавляет безопасные теги <br />. Если поменять порядок — htmlspecialchars(nl2br($comment)) — собственные теги <br /> будут экранированы в видимый текст &lt;br&gt;, и переносы строк так и не отобразятся.

Распространённые ошибки

  • Символ новой строки не удаляется и не заменяется. \n остаётся в строке. Если нужно убрать перенос строки, примените str_replace() после.
  • Это не функция безопасности. nl2br() не выполняет экранирование. Всегда используйте её в паре с htmlspecialchars() для ненадёжного ввода.
  • Функция обрабатывает только символы новой строки, а не перенос текста в <textarea> или перенос по словам — эти эффекты визуальные и никогда не попадают в скрипт.
  • Только для обычного текста. Использовать её вывод как тело email или записывать в CSV бессмысленно; теги <br> являются HTML и ничего не значат за пределами браузера.

Связанные функции

  • htmlspecialchars() — экранирование специальных символов перед выводом (используйте вместе с nl2br()).
  • str_replace() — замена подстрок, например для полного удаления переносов строк.
  • strip-tags() — удаление HTML-тегов из строки.
  • trim() — удаление начальных и конечных пробельных символов, включая лишние переносы строк.

Практика

Практика
Что делает функция nl2br() в PHP?
Что делает функция nl2br() в PHP?
Was this page helpful?