PHP - как создать символ новой строки?

287

В PHP я пытаюсь создать символ новой строки:

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo '\r\n';

Затем я открываю созданный файл в "Блокноте" и записывает новую строку буквально:

1 Джон Доу 1 Джон Доу 1 Джон Доу \r\n

Я пробовал много вариантов \r\n, но никто не работает. Почему новая линия не превращается в новую строку?

Теги:
string-interpolation

13 ответов

502
Лучший ответ

Только двойные кавычки интерпретируют escape-последовательности \r и \n как "0x0D" и "0x0A" соответственно, поэтому вы хотите

"\r\n"

Одиночные кавычки, с другой стороны, знают только escape-последовательности \\ и \'.

Итак, если вы не объедините одну кавычную строку с разрывом строки, сгенерированным в другом месте (например, с использованием строки с двойными кавычками "\r\n" или с помощью chr function chr(0x0D).chr(0x0A)), единственный способ разбить строку в одной кавычной строке - буквально набрать ее с помощью вашего редактора:

$s = 'some text before the line break
some text after';

Убедитесь, что ваш редактор отредактировал свои параметры разрыва строки, если вам нужна определенная последовательность символов (например, \r\n).

  • 0
    Так что, если здесь есть политика без двойных кавычек, как лучше это сделать со строками в одинарных кавычках?
  • 1
    @Pacerier Единственный способ получить символы возврата каретки и новой строки в одной строке в кавычках - это ввод символов непосредственно с клавиатуры (нажмите Enter, в зависимости от настроек вашего редактора в конце строки). В противном случае просто используйте конкатенацию строк.
Показать ещё 3 комментария
164

Для окончательной окончательной версии платформы вы можете использовать предопределенную константу PHP_EOL, как в:

echo $clientid, ' ', $lastname, PHP_EOL;
  • 10
    PHP_EOL скорее будет зависеть от платформы, так как его значение зависит от платформы.
  • 35
    Гамбо, что означало нневала, так это то, что с точки зрения кодирования не имеет значения, на какой платформе ты находишься.
Показать ещё 3 комментария
63

Команда "echo" в PHP отправляет вывод в браузер как raw html, поэтому даже если в двойных кавычках браузер не будет анализировать его на две строки, потому что символ новой строки в HTML ничего не значит. Вот почему вам нужно либо использовать:

echo [output text]."<br>";

при использовании "эха", или вместо этого используйте fwrite...

fwrite([output text]."\n");

Это приведет к выводу HTML-строки вместо "\n".

  • 3
    При том, как задан вопрос, вполне вероятно, что он выводит эти данные либо в текстовое поле, либо в javascript и т. Д. Для синтаксического анализа или чтения обычного текста, который не будет отображаться как HTML
  • 1
    Это то, что я искал, спасибо.
Показать ещё 1 комментарий
24

Используйте константу PHP_EOL, чтобы получить нужный символ независимо от платформы.

http://us3.php.net/manual/en/reserved.constants.php

Простой пример использования:

<?php
$data = 'First line' . PHP_EOL .
        'Second line' . PHP_EOL .
        'Third line';

file_put_contents("filename.txt", $data);
?>
  • 4
    Это должен быть принятый ответ.
  • 3
    Этот ответ является одним из лучших, поскольку он ссылается на официальную документацию. Простой пример использования сделает его лучшим!
Показать ещё 1 комментарий
15

Строки между двойными кавычками "" интерполяция, то есть они преобразуют экранированные символы в печатные символы.

Строки между одинарными кавычками '' являются буквальными, то есть они обрабатываются точно так же, как набираются символы.

Вы можете иметь обе строки в одной строке:

echo '$clientid $lastname ' . "\r\n";
echo "$clientid $lastname \r\n";

выходы:

$clientid $lastname
1 John Doe
  • 0
    Ваше объяснение о различных типах строковых обозначений в PHP прекрасно, поскольку оно показывает ошибку, допущенную автором вопроса. Но ваш пример кода не даст ожидаемого результата, поскольку переменные используются в одной строке в кавычках, и, как вы упомянули, они не будут интерполированы!
  • 0
    @Damien Flament, вот что я сказал - содержимое между одинарными кавычками не интерполируется, а содержимое между двойными кавычками. Возможно, мой пример сбивает с толку, потому что вы ожидаете увидеть содержимое $ clientid и $ lastname, а не литералы "$ clientid" и "$ lastname". Я думаю, что это был заголовок таблицы, которую я использовал во время отладки. следующие строки были бы echo "$clientid $lastname\r\n"
Показать ещё 1 комментарий
12

Фактически \r\n для html-стороны вывода. С помощью этих символов вы можете просто создать новую строку в html-коде, чтобы сделать ее более читаемой:

echo "<html>One line \r\n Second line</html>";

выведет:

<html>First line
Second line</html>

что просмотр страницы будет выглядеть следующим образом:

First line Second line

Если вы действительно имели в виду это, вам нужно только исправить одну цитату с цитатой:

echo "\r\n";

В противном случае, если вы хотите разбить текст, в нашем примере "Первая строка" и "Вторая строка" вы должны использовать код html: <br />:

First line<br />Second line

который будет выводить:

First line
Second line

Также было бы более читаемым, если вы замените весь script на:

echo "$clientid $lastname \r\n";
  • 1
    Нет, не должно. Потому что это в основном неправильно. Первый блок кода будет отображаться как First line Second line - любые пробелы, включая символы новой строки, будут сжаты до одного символа пробела в отображаемом выводе. Кроме того, </br> является действительным HTML.
  • 0
    @ D_4_ni, это правда . Благодарю. Ред.
Показать ещё 1 комментарий
11

Вы должны использовать это:

"\n"

Вы также можете взглянуть на PHP EOL.

6

w3school предлагается следующим образом:

echo nl2br("One line.\n Another line.");

используя эту функцию, вы можете это сделать. Я пробовал другие способы, упомянутые выше, но они не помогут мне.

  • 0
    Вопрос не в том, чтобы разбить строку в абзаце в HTML. Это про символ новой строки !
3

По какой-то причине каждое сообщение, спрашивающее о прохождении новой строки в PHP, не упоминает случай, когда просто вставка новой строки в строки с одним кадром будет делать именно то, что вы думаете:

ex 1.

 echo 'foo\nbar';

Пример 1 явно не печатает желаемый результат, однако, хотя это правда, вы не можете избежать новой строки в одинарных кавычках, вы можете иметь один:

ex 2.

 echo 'foo
 bar';

Пример 2 имеет точно заданное поведение. К сожалению, новая строка, которая вставлена, зависит от операционной системы. Обычно это не проблема, поскольку веб-браузеры/серверы будут правильно интерпретировать новую строку, будь то \r,\r\n или\n.

Очевидно, что это решение не идеально, если вы планируете распространять файл другими способами, а затем веб-браузером и несколькими операционными системами. В этом случае вы должны увидеть один из других ответов.

Примечание: с помощью полнофункционального текстового редактора вы сможете вставить новую строку как двоичный символ (символы), который представляет новую строку в другой операционной системе, чем редактирование файла. Если все остальное не удается, просто используйте hex-редактор для вставки двоичного символа ascii.

2

Используйте PHP nl2br, чтобы получить символы новой строки в текстовой строке.

$text = "Manu - хороший мальчик. (Enter) Он может хорошо писать.

echo nl2br ($ text);

Результат.

Ману - хороший мальчик.

Он умеет хорошо писать.

  • 0
    Функция nl2br преобразует символы новой строки в HTML-тег <br /> . Если строка не содержит символа новой строки, эта функция ничего не сделает! Более того, вопрос не в том, чтобы разбить строку в абзаце в HTML. Это про символ новой строки !
2

Используйте chr (13) для возврата каретки и chr (10) для новой строки

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo chr (13). chr (10);
  • 1
    Это решение работает, но оно слишком сложное и гораздо менее интуитивное, чем \r\n .
1

Я также пробовал эту комбинацию как в одиночных кавычках, так и в двойных кавычках. Но никто не работал. Вместо использования \n лучше использовать <br/> в двойных кавычках. Как это..

$variable = "and";
echo "part 1 $variable part 2<br/>";
echo "part 1 ".$variable." part 2";
  • 0
    Вопрос не в том, чтобы разбить строку в абзаце в HTML. Это про символ новой строки !
0

Для любых выражений эха я всегда использую <br> внутри двойных кавычек.

  • 1
    Вопрос не в том, чтобы разбить строку в абзаце в HTML. Это про символ новой строки !

Ещё вопросы

Сообщество Overcoder
Наверх
Меню