Разрывы эхо-строки PHP

В чем разница между \ n и \ r (я знаю, что это как-то связано с ОС), и как лучше всего отобразить разрыв строки, который будет работать на разных платформах?

Обновлено: В ответ на Jarod я буду использовать ths для вывода разрыва строки в файле журнала .txt, хотя уверен, что буду использовать его в будущем для таких вещей, как отображение макета HTML на странице.

В дополнение к моему ответу ниже, как вы используете вывод echo'd из php? Очевидно, на веб-странице тег <br/> определяет разрыв строки, поэтому я предполагаю, что он используется по-другому?

Jarod Elliott 01.11.2008 07:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
46
1
98 566
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий
  • \n - это разрыв строки Linux / Unix.
  • \r - это классический перенос строки Mac OS (не OS X). Mac OS X использует указанный выше unix \n.
  • \r\n - это разрыв строки Windows.

Обычно я просто использую \n в наших системах Linux, и большинство приложений для Windows все равно справляются с этим.

Если я использую \ r \ n, он будет работать в Linux и в Windows? Кроме того, будет ли он выводить \ r как текст в Linux, если я это сделаю?

PHLAK 01.11.2008 08:11

У меня сейчас нет доступа к linux для проверки, но я уверен, что \ r не выводится должным образом в linux, если вы просматривали его как текстовый файл. Должно быть довольно легко протестировать различные варианты, если вам нужно увидеть, как они выглядят.

Jarod Elliott 01.11.2008 08:54

Нет, он не будет печатать, для максимальной совместимости используйте \ r \ n

UnkwnTech 01.11.2008 11:49

Теперь, когда Mac OS X является Unix, используется ли \ n?

Imran 02.11.2008 15:41

@ Imran - хороший вопрос! Мне самому это было интересно, но у меня нет Mac OS X для тестирования.

Jarod Elliott 03.11.2008 01:09

Да, Mac OS X также использует \n. \r сейчас полностью устарел.

Raphael Schweikert 27.04.2011 08:32

Ответ Джарода содержит правильное использование \ r \ n в различных ОС. Вот немного истории:

  • \ r, или символ ASCII с десятичным кодом 13, называется CR после "возврата каретки".
  • \ n, или символ ASCII с десятичным кодом 10, называется «новая строка» или LF после «перевода строки».

Термины «возврат каретки» и «перевод строки» восходят к тому времени, когда вместо терминалов с монитором и клавиатурой использовались телетайпы. Что касается телетайпов или пишущих машинок, «возврат каретки» означал перемещение курсора и возврат к первому столбцу текста, в то время как «перевод строки» означал вращение ролика для перехода к следующей строке. В то время это различие имело смысл. Сегодня комбинации \ n, \ r, \ r \ n для обозначения конца строки текста совершенно произвольны.

Используйте константу PHP_EOL, которая автоматически устанавливается на правильный разрыв строки для операционной системы, в которой выполняется сценарий PHP.

Обратите внимание, что эта константа объявлена ​​начиная с PHP 5.0.2.

<?php
    echo "Line 1" . PHP_EOL . "Line 2";
?>

Для обратной совместимости:

if (!defined('PHP_EOL')) {
    switch (strtoupper(substr(PHP_OS, 0, 3))) {
        // Windows
        case 'WIN':
            define('PHP_EOL', "\r\n");
            break;

        // Mac
        case 'DAR':
            define('PHP_EOL', "\r");
            break;

        // Unix
        default:
            define('PHP_EOL', "\n");
    }
}

Неплохая идея, но я хочу, чтобы все было максимально обратно совместимо.

PHLAK 01.11.2008 08:08

Обратите внимание, что выходные данные не обязательно отправляются в ОС, в которой работает PHP.

eyelidlessness 01.11.2008 08:50

Этот ответ нужно пометить как правильный. Я разработал приложение и протестировал его на Hostmonster.com (они работают с RedHat Linux), а клиент развернул код в системе CentOS. В dev "\ n" отображается новая строка, как и ожидалось; на коробке CentOS этого не было. Как только я изменил "\ n" на PHP_EOL, проблема исчезла, и код заработал, как ожидалось. Извлеченный урок: даже несмотря на то, что prod OS является производной от dev OS, и хотя "\ n" должен работать на всех * nix-боксах, если это абсолютно необходимо реализовать правильно, всегда используйте PHP_EOL, никогда "\ n"

Mike C. 04.01.2011 23:38

Те, которые пришли сюда из-за того, что preg_match не обнаруживает окончания строки, замените $ на (?:\r\n|\r|\n|$) (где ?: - это группа регулярных выражений без захвата).

CPHPython 03.09.2018 20:07

Для PHP_EOL на PHP4 обратная совместимость не требуется.

Необходимо исправить утверждение Мура о постоянной доступности PHP_EOL: «... объявлено с PHP 5.0.2.».

Нет, он существует с PHP 4.3.10. Любой, кто до сих пор занимается чем-то меньшим, в любом случае не должен заниматься бизнесом. На сегодняшний день никто не должен использовать что-либо меньшее, чем PHP 5!

Из руководства по PHP: «PHP_EOL Правильный символ конца строки для этой платформы. Доступен с PHP 4.3.10 и PHP 5.0.2».

Другие вопросы по теме