Menu

Перенос строки в PHP: \n, PHP_EOL и nl2br

Чтобы вывести новую строку в PHP, напишите "\n" внутри двойных кавычек или используйте PHP_EOL. На веб-странице перенос строки не виден, поэтому там нужен <br> или nl2br(). Разница между ними, почему '\n' в одинарных кавычках не работает и как разбить текст по строкам или убрать переносы.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Чтобы вывести новую строку, напишите \n внутри строки в двойных кавычках: echo "Line 1\nLine 2";. Константа PHP_EOL делает то же самое и в конце строки читается понятнее: echo 'Done' . PHP_EOL;. На веб-странице перенос строки не отображается как разрыв; там нужен <br> или nl2br().

Одинарные и двойные кавычки

Escape-последовательности вроде \n и \t работают только в двойных кавычках. В одинарных '\n' это два символа: обратный слеш и буква n. Это обычная причина того, что "\n не работает".

Все escape-последовательности, которые понимают двойные кавычки, перечислены на странице про строки.

PHP_EOL и "\n"

PHP_EOL это окончание строки той системы, на которой работает PHP: "\n" в Linux и macOS, "\r\n" в Windows. Используйте его для вывода в терминал и для файлов, которые будете читать на той же машине. Когда формат задаёт своё окончание строки, используйте его: HTTP-заголовкам и email нужен "\r\n", а большинство инструментов везде нормально читают "\n".

"\r" это возврат каретки, "\n" перевод строки. Файлы Windows заканчивают строки обоими, "\r\n", поэтому текст от пользователя Windows или из <textarea> часто содержит неожиданные символы \r.

Новая строка в HTML: br и nl2br

Браузер сжимает переносы строк в один пробел, поэтому echo "a\nb" показывает на странице a b. Либо выводите <br> сами, либо оставьте переносы в тексте и преобразуйте их через nl2br(), которая вставляет <br /> перед каждым. Запустите и сравните вкладки Output и Page:

На вкладке Output все три варианта выглядят похоже. На вкладке Page первый сливается в одну строку, nl2br() разбивает его, а <pre> сохраняет переносы как написано.

Вывод текста из textarea с переносами

Текст из <textarea> сохраняет строки, которые ввёл пользователь, но перед выводом в HTML его нужно экранировать. Порядок важен: сначала htmlspecialchars(), потом nl2br(), иначе экранируются сами теги <br />. Запустите, введите несколько строк в поле и нажмите Preview: тот же скрипт выполнится снова с заполненным $_POST.

Перенос строки из textarea может прийти как "\r\n" или "\n"; в обоих есть "\n", поэтому подсчёт этого символа работает в любом случае. Почему экранирование здесь обязательно, объясняет htmlspecialchars().

Разбиение строки по переносу

explode("\n", $text) работает для текста, который вы создали сами. В тексте от пользователей или из файлов окончания строк могут быть "\r\n", "\n" или "\r"; preg_split('/\R/', $text) справляется со всеми, потому что \R совпадает с любым переносом строки.

Удаление переносов строк

Чтобы превратить многострочный текст в одну строку, замените все виды окончаний строк. Заменяйте "\r\n" раньше одиночных символов, иначе каждый перенос строки Windows превратится в два пробела:

trim() и rtrim() удаляют переносы на концах строки, но никогда в середине, поэтому они подходят для строки, прочитанной из файла, и не подходят для склейки строк.

Часто задаваемые вопросы

Как вывести новую строку через echo в PHP?

Поставьте \n внутри строки в двойных кавычках: echo "Line 1\nLine 2";. Или допишите константу: echo 'Line 1' . PHP_EOL;. В браузере перенос строки не отображается; там используйте <br> или nl2br().

Почему \n не работает в PHP?

Либо строка в одинарных кавычках, где '\n' это обратный слеш и буква n, либо вывод показывается как HTML, где браузер считает перенос строки пробелом. Используйте "\n" в двойных кавычках для текстового вывода и nl2br() или <br> для веб-страниц.

Что такое PHP_EOL?

Константа с окончанием строки той операционной системы, на которой работает PHP: "\n" в Linux и macOS, "\r\n" в Windows. Используйте её для вывода в терминал или в локальные файлы; для HTTP, email и CSV-файлов окончание строки обычно задаёт сам формат, независимо от ОС.

Что делает nl2br в PHP?

nl2br($text) вставляет <br /> перед каждым переносом строки, поэтому текст, введённый в <textarea>, сохраняет свои строки при выводе в HTML. Сначала экранируйте: nl2br(htmlspecialchars($text)).

Как удалить переносы строк из строки в PHP?

Замените все три вида окончания строки: str_replace(["\r\n", "\r", "\n"], ' ', $text) или регулярным выражением preg_replace('/\R/', ' ', $text). Чтобы убрать только перенос в конце, используйте rtrim($text, "\r\n").

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ