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

405

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

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

После этого я открываю созданный файл в Блокноте, и он буквально записывает новую строку:

1 Джон Доу 1 Джон Доу 1 Джон Доу

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

davidjhp
источник
1
возможный дубликат Print newline в PHP в одинарных кавычках
Гордон

Ответы:

639

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

"\r\n"

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

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

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

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

гумбо
источник
1
@Pacerier Единственный способ получить символы возврата каретки и новой строки в одной строке в кавычках - это ввод символов непосредственно с клавиатуры (нажмите Enter, в зависимости от настроек редактора в конце строки). В противном случае просто используйте конкатенацию строк.
Гамбо
1
@Gumbo: Вы говорите, что строки в одинарных кавычках, с другой стороны, знают только escape-последовательности \\ и \ '. Но я только что напечатал строку с echo как <? Php echo 'Вы используете Internet Explorer. <Br>'; echo 'Новая строка добавлена'; ?> и видел вывод в браузере. Он буквально добавил новую строку между двумя отображаемыми строками. Это означает, что символ <br> или <br/> раскрывается в одной строке в кавычках. Есть ли какие-либо другие такие символы HTML, кроме этих трех, которые могут быть поняты PHP внутри строк в одинарных кавычках? Я прошу вас обновить свой ответ соответственно. Благодарю вас.
PHPFan
1
@ user2839497 То, что вы говорите, не имеет никакого смысла. Здесь нет контекста браузера. И, конечно, браузер отображает новую строку при обнаружении <br/>. И, конечно же, ничто не мешает вам добавить '<br/>' в одну строку в кавычках. Но это не делает перевод строки в простой текстовый файл.
Фехтовальщик
1
@Pacerier Для политики с одинарными кавычками вместо разрыва строки в редакторе, как Гумбо предложил в своем комментарии, вы можете использовать другое решение в ответе Gumbos, например: «вывод новой строки» .chr (0x0A). »В одной строке в кавычках. ».
Фехтовальщик
2
Вы должны использовать PHP_EOLвместо этого
kurdtpage
234

Используйте предопределенную PHP_EOLконстанту:

echo $clientid, ' ', $lastname, PHP_EOL;

Значение константы будет установлено в соответствии с окончанием строки операционной системы, в которой выполняется PHP. В Linux это будет "\n"; на винде это будет "\r\n".

nnevala
источник
97

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

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

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

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

Это выведет новую строку HTML вместо "\ n".

davea0511
источник
4
С учетом того, как задан вопрос, вполне вероятно, что он выводит эти данные либо в текстовое поле, либо в javascript и т. Д. Для синтаксического анализа или чтения простого текста, который не будет отображаться как HTML
PC3TJ
43

Используйте константу 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);
?>
Сальви Паскуаль
источник
23

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

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

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

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

выходы:

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

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

"\n"

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

Воутер Доргело
источник
13

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

echo "<html>First 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

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

echo "$clientid $lastname \r\n";
башмак
источник
1
Нет, не должно. Потому что это в основном неправильно. Первый блок кода будет отображаться как First line Second line- любой пробел, включая символы новой строки, будет сжиматься до одного символа пробела в отображаемом выводе. Кроме того, </br>все, кроме действительного HTML.
D_4_ni
1
Также имейте в виду, что если вы отправляете текстовые электронные письма со своим php-скриптом, вам все равно понадобятся эти окончания строк вместо разрывов (<br>)
KennyV
9

w3school предлагает этот способ:

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

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

амин голами
источник
Вопрос не в том, чтобы разбить строку в абзаце в HTML. Это про символ новой строки !
Дэмиен
Для контекста nl2br()функция преобразует символы новой строки в <br />тег HTML. Это может быть полезно для создания новой строки на страницах браузера, но не новой строки в текстовых файлах или JavaScript или для печати на экране или в консоли.
Шерил Хохман
4

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

пример 1

 echo 'foo\nbar';

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

пример 2

 echo 'foo
 bar';

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

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

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

user2574384
источник
3

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

$ text = "Ману хороший мальчик. (Enter) Он умеет хорошо кодировать.

echo nl2br ($ text);

Результат.

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

Он умеет хорошо кодировать.

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

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

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

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

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo chr (13). chr (10);
Бешеный ислам раджиб
источник
2

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

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

У меня ничего не получалось.

PHP_EOL

. "\r\n";

$NEWLINE_RE = '/(\r\n)|\r|\n/'; // take care of all possible newline-encodings in input file
$var = preg_replace($NEWLINE_RE,'', $var);

Работает для меня:

$admin_email_Body = $admin_mail_body .'<br>' ."\r\n";
$admin_email_Body .= 'This is line 2 <br>' ."\r\n";
$admin_email_Body .= 'This is line 3 <br>' ."\r\n";
Мотахар Хоссейн
источник