Создание разрыва строки в PHP коде: от основ до нюансов
Способы добавления новой строки при выводе текста в PHP
Наиболее универсальный и кроссплатформенный способ - использовать предопределённую константу PHP_EOL. Она автоматически подставляет правильный символ конца строки для операционной системы, на которой выполняется скрипт (LF на Linux/macOS, CRLF на Windows).
<?php
echo 'Первая строка' . PHP_EOL . 'Вторая строка';
?>
Php новая строка (новая строка в php)
Результат: на экране (или в файле) две строки, разделённые переносом.
Типичная ошибка: путаница с синтаксисом - константу PHP_EOL нельзя использовать в одинарных кавычках, она распознаётся только как отдельное выражение. Также не стоит забывать, что в браузере символы перевода строки не отображаются, для веба нужны теги <br>.
Когда применять: при записи в текстовые файлы, логах, работе с командной строкой, а также везде, где ожидается родной для ОС формат перевода строки.
Как сделать перенос строки внутри обычной строки?
В PHP управляющая последовательность \n (LF) работает только внутри строк, заключённых в двойные кавычки или при использовании heredoc. Символ \r (возврат каретки) редко используется отдельно, обычно комбинация \r\n для Windows.
<?php
echo "Первая строка\nВторая строка";
?>
Проблема: если текст выводится в HTML, браузер игнорирует \n. Для отображения разрыва строки в вебе необходимо заменить \n на тег <br> вручную или с помощью функции nl2br().
Когда использовать: при формировании текста для plain‑text окружения (почта, логи, терминал, файлы) либо перед вызовом nl2br().
Когда требуется комбинация CRLF (\r\n)?
Некоторые Windows‑приложения (блокнот, старые версии Notepad) ожидают последовательность \r\n. Хотя современные версии распознают и одиночный LF, для совместимости с легаси можно использовать \r\n в двойных кавычках.
<?php
echo "Первая строка\r\nВторая строка";
?>
Ошибка: частая путаница - порядок символов. Правильно \r\n, а не наоборот. Иначе в некоторых редакторах отобразится «ступенька».
Когда применять: генерация файлов .csv или .txt для старых Windows‑программ, взаимодействие с устаревшими протоколами.
Как сделать перенос строки в веб‑странице?
Для вывода в браузере используется HTML‑тег <br> (или <br />). PHP позволяет вставить его прямо в строку или через конкатенацию.
<?php
echo 'Первая строка<br>Вторая строка';
echo "Первая строка<br>Вторая строка";
?>
Проблема: если текст получен из внешнего источника (база данных, пользователь), вставка произвольного <br> может нарушить безопасность (XSS). Лучше преобразовывать переносы строк только после экранирования специальных символов.
Когда применять: любой HTML‑вывод, где нужен визуальный разрыв строки.
Как автоматически преобразовать переносы строк в HTML?
Встроенная функция nl2br() заменяет все символы \n (а также \r\n и \r) на тег <br>. Это удобно при выводе многострочного текста из файлов или базы.
<?php
$text = "Строка 1\nСтрока 2\nСтрока 3";
echo nl2br($text);
?>
Результат в HTML: каждая исходная строка заканчивается <br>.
Ошибка: если текст уже содержит HTML‑теги, nl2br() может испортить структуру (например, вставить <br> между тегами). Нужно применять к «сырому» тексту или после экранирования.
Когда использовать: вывод комментариев, статей, логов на веб‑странице без ручной обработки.
Как сохранить форматирование многострочного текста без экранирования?
Синтаксис heredoc (и nowdoc) позволяет записывать длинные строки с переносами, не используя управляющие последовательности. Переносы в исходном коде становятся переносами в строке.
<?php
$text = <<<EOT
Первая строка
Вторая строка
Третья строка
EOT;
echo $text;
?>
Проблема: после закрывающего идентификатора (EOT) не должно быть пробелов или точек с запятой внутри строки - только в самом начале строки. Иначе возникает синтаксическая ошибка.
Когда применять: шаблоны, SQL‑запросы, большие тексты.
Как вывести перенос строки при работе в командной строке?
Для CLI‑скриптов также подходит PHP_EOL или \n (Linux). Браузерные теги бесполезны, нужны реальные управляющие символы.
<?php
fwrite(STDOUT, 'Первая строка' . PHP_EOL . 'Вторая строка');
?>
Ошибка: если скрипт запускается на Windows, а используется только \n, некоторые программы (например, cmd) могут отображать строки слитно.
Когда использовать: консольные утилиты, кроны, обмен данными с другими CLI‑программами.
Дополнительные примеры использования переноса строки в PHP
Пример 1. Запись многострочного содержимого в файл с выбором формата строки
<?php
$content = 'Строка 1' . PHP_EOL . 'Строка 2' . PHP_EOL . 'Строка 3';
file_put_contents('test.txt', $content);
?>
Файл test.txt содержит: Строка 1 Строка 2 Строка 3 (переносы соответствуют ОС, на которой выполнен скрипт)
Пример 2. Комбинация heredoc и nl2br для вывода многострочной строки в HTML
<?php
$poem = <<<POEM
Раз, два, три,
Четыре, пять,
Вышел зайчик погулять.
POEM;
echo nl2br(htmlspecialchars($poem));
?>
Раз, два, три,<br> Четыре, пять,<br> Вышел зайчик погулять.
Пример 3. Преобразование переносов строк из разных форматов (\r\n, \n, \r) в единый вид
<?php
$dirty = "Windows\r\nLinux\nOldMac\r";
$clean = str_replace(["\r\n", "\r"], "\n", $dirty);
echo $clean;
?>
Windows Linux OldMac
Пример 4. Генерация CSV‑строки с CRLF для совместимости с MS Excel
<?php
$csv = "Имя;Возраст\r\nТарас;30\r\nОльга;25\r\n";
file_put_contents('data.csv', $csv);
?>
Файл data.csv открывается в Excel как таблица с двумя строками данных (заголовок и данные).
Пример 5. Использование nowdoc для точного сохранения содержимого без подстановки переменных
<?php
$name = 'Анна';
$text = <<<'NOW'
Привет, $name!
Как дела?
NOW;
echo $text;
?>
Привет, $name! Как дела? (переменная не интерполирована)
Пример 6. Вывод строк с переносами и символом возврата каретки в консоли для анимации прогресса
<?php
for ($i = 0; $i <= 100; $i += 25) {
echo "\rОбработано: $i%";
usleep(500000);
}
echo PHP_EOL . 'Готово!';
?>
Обработано: 0% (затем строка перезаписывается до 100%, и финальная строка «Готово!»)