Новая строка = \ n ИЛИ \ r \ n? - PullRequest
       3

Новая строка = \ n ИЛИ \ r \ n?

33 голосов
/ 28 января 2011

Я видел, как многие разработчики используют разные методы для разделения строки по новым строкам, но я запутался, что является правильным: \r\n ИЛИ \n только?

Ответы [ 4 ]

70 голосов
/ 28 января 2011

\n используется для систем Unix (включая Linux и OSX).

\r\n в основном используется в Windows.

\r используется на действительно старых компьютерах Mac.

PHP_EOL константа используется вместо этих символов для переносимости между платформами.

23 голосов
/ 25 марта 2014

Данный ответ далек от завершения. На самом деле, он настолько далек от завершения, что заставляет читателя поверить, что этот ответ зависит от ОС, а не зависит. Это также не то, что зависит от языка программирования (как предложили некоторые комментаторы). Я собираюсь добавить больше информации, чтобы сделать это более ясным. Во-первых, давайте приведем список текущих новых вариантов строки (как, например, то, чем они были с 1999 года):

  • \r\n используется только в Блокноте Windows, командной строке DOS, большей части Windows API и в некоторых (более старых) приложениях Windows.
  • \n используется для всех других систем, приложений и Интернета.

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

PHP также определяет символ новой строки с именем PHP_EOL. В качестве этой константы указывается строка новой строки для операционной системы, на которой работает PHP (\r\n для Windows и \n для всего остального). Эта константа не очень полезна для веб-страниц и ее следует избегать для вывода HTML или для записи большей части текста в файлы. Это становится ОЧЕНЬ полезным, когда мы переходим к выводу командной строки из приложений PHP, потому что это позволит вашему приложению согласованно выводить данные в окно терминала во всех поддерживаемых ОС.

Если вы хотите, чтобы ваши PHP-приложения работали с любого сервера, на котором они размещены, две самые важные вещи, которые следует помнить, это то, что вы всегда должны просто использовать \n, если это не вывод терминала (в этом случае вы используете PHP_EOL) и вы также должны ВСЕГДА использовать / в качестве разделителя пути (не \).

Еще более длинное объяснение:

Приложение может выбрать использование любых концов строк, которые ему нравятся, независимо от стиля окончания строк ОС по умолчанию. Если я хочу, чтобы мой текстовый редактор печатал новую строку каждый раз, когда он встречает период, который не сложнее, чем использование \n для представления новой строки, потому что я интерпретирую текст так, как я его все равно отображаю. Итак, я возился с измерением ширины каждого символа, чтобы он знал, где отображать следующий символ, поэтому очень просто добавить утверждение о том, что, если текущий символ представляет собой точку, выполните действие новой строки (или, если это \n, затем отобразите точку).

Помимо нулевого терминатора, ни один символьный код не является священным, и когда вы пишете текстовый редактор или средство просмотра, вы отвечаете за перевод битов в вашем файле в глифы (или возврат каретки) на экране. Единственное, что отличает управляющий символ, такой как символ новой строки, от других символов, - это то, что большинство наборов шрифтов не включают их (то есть они не имеют визуального представления).

При этом, если вы работаете на более высоком уровне абстракции, вы, вероятно, не создаете свои собственные элементы управления текстовым полем.Если это так, то вы застряли на любом конце строки, доступном для вас.Даже в этом случае очень просто автоматически определить стиль окончания строки для любой строки и выполнить преобразование перед загрузкой текста в элемент управления, а затем отменить его при чтении из этого элемента управления.Это означает, что если вы являетесь разработчиком приложений для настольных компьютеров и ваше приложение не распознает \n как символ новой строки, то это не очень дружелюбное приложение, и у вас действительно нет оправданий, потому что сделать его правильнопуть.Это также означает, что тому, кто пишет «Блокнот», должно быть стыдно за себя, потому что на самом деле очень легко сделать намного лучше, и многие люди страдают от его использования каждый день.

4 голосов
/ 28 января 2011

Если вы программируете на PHP, полезно разделить строки на \n, а затем trim() в каждой строке (при условии, что вам не нужны пробелы), чтобы получить «чистую» строку независимо от того.

foreach($line in explode("\n", $data))
{
    $line = trim($line);
    ...
}
1 голос
/ 28 января 2011

Для php у вас должно работать \ n!

http://php.net/manual/en/language.types.string.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...