PHP - як створити символ нового рядка?


405

У PHP я намагаюся створити символ нового рядка:

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

Потім я відкриваю створений файл у Блокноті, і він пише буквально новий рядок:

1 John Doe \ r \ n 1 John Doe \ r \ n 1 John Doe \ r \ n

Я спробував багато варіацій \r\n, але жодної роботи не було. Чому новий рядок не перетворюється на новий?


Відповіді:


638

Лише подвійні котирування рядків інтерпретують послідовності евакуації \rта \nяк "0x0D" та "0x0A" відповідно, тож ви хочете:

"\r\n"

З іншого боку, цитовані рядки знають лише послідовності втечі \\та \'.

Тому, якщо ви не з'єднали єдиний цитуваний рядок з розривом рядка, згенерованим в іншому місці (наприклад, використовуючи подвійний рядок з цитуванням "\r\n"або використовуючи chrфункцію chr(0x0D).chr(0x0A) ), єдиний інший спосіб мати розрив рядка в межах одного цитованого рядка - це буквально набрати його разом із вашим редактором:

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

Не забудьте перевірити ваш редактор на його параметри розриву рядків, якщо вам потрібна певна послідовність символів ( \r\nнаприклад).


1
@Pacerier Єдиний спосіб повернути карету та нові символи рядка в одній цитуваній рядку - це введення символів безпосередньо за допомогою клавіатури (натисніть Enter, залежно від налаштувань редактора щодо закінчень рядків). В іншому випадку просто використовуйте конкатенацію рядків.
— Gumbo

1
@Gumbo: Ви говорите про рядки, що цитуються окремо, з іншого боку, ви знаєте лише послідовності втечі \\ і \ '. Але я щойно надрукував рядок із echo як <? Php echo 'Ви використовуєте Internet Explorer. <br>'; echo 'Додано новий рядок'; ?> і бачив вихід у браузері. Він буквально додав новий рядок між двома відображеними рядками. Це означає, що символ <br> або <br/> розширюється в одному цитуваному рядку. Чи є інші такі символи HTML, крім цих трьох, які можна зрозуміти PHP всередині цитованих рядків? Я прошу вас відповідно оновити свою відповідь. Дякую тобі.
— PHPFan

1
@ user2839497 Те, що ви говорите, не має сенсу. Тут немає контексту браузера. І звичайно, браузер робить новий рядок, коли зустрічається <br/>. І звичайно, немає нічого, що не заважає вам додати "<br/>" в один цитуваний рядок. Але це не відображає новий рядок у простому текстовому файлі.
— Фехтувальник

1
@Pacerier Для політики єдиного цитування замість того, щоб переривати рядок у редакторі, як, наприклад, запропонував Gumbo у своєму коментарі, ви можете використати інше рішення у відповіді Gumbos, наприклад: "вихід нового рядка" .chr (0x0A). "В одному цитуваному рядку '.
— Фехтувальник

2
Вам слід скористатися PHP_EOLнатомість
— kurdtpage

234

Використовуйте попередньо задану PHP_EOLконстанту:

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

Постійне значення буде встановлено відповідно до закінчень рядків операційної системи, де виконується PHP. У Linux це буде "\n"; в Windows, це буде "\r\n".


96

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

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

під час використання "echo" або замість цього використовувати fwrite ...

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

Це виведе новий рядок HTML замість "\ n".


4
Що стосується питання, можливо, він передає ці дані або в текстове поле, або в JavaScript, і т. Д. Для розбору або читання простого тексту не потрібно виводити як HTML
— PC3TJ


23

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

Рядки між окремими лапками ''є буквальними, тобто вони трактуються точно так, як вводяться символи.

Ви можете мати обох в одному рядку:

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

Виходи:

$clientid $lastname
1 John Doe

Ваше пояснення щодо різних типів рядкових позначень у PHP чудово, оскільки воно показує помилку, допущену автором запитання. Але ваш зразок коду не дасть очікуваного результату, оскільки змінні використовуються в одній цитованій рядку і, як ви вже згадували, вони не будуть інтерпольовані!
— Дамієн Фламент

@Damien Flament, Це я вже сказав - вміст між окремими цитатами не інтерполюється, але вміст між подвійними цитатами є. Можливо, мій приклад заплутаний, тому що ви розраховуєте побачити вміст $ clientid та $ прізвище, а не літерали "$ clientid" та "$ прізвище". Я думаю, що це був заголовок таблиці, який я використовував під час налагодження. наступні рядки були бecho "$clientid $lastname\r\n"
— Кевін С. Міллер

Пишучи "очікуваний результат", я кажу про результат, який очікував автор у своєму питанні. Додавання коду, показаного до вашого коментаря, до вашої відповіді та показ результату може покращити якість вашої відповіді.
— Дамієн Фламент


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, або для друку на екран або консоль.
— SherylHohman

4

З якоїсь причини, кожен окремий пост із запитом про вихід нових рядків у PHP не згадує той випадок, що просто вставлення нової лінії в рядки з цитатами однозначно виконає саме те, що ви думаєте:

колишня 1.

 echo 'foo\nbar';

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

колишній 2.

 echo 'foo
 bar';

Приклад 2 має саме бажану поведінку. На жаль, вставлений новий рядок залежить від операційної системи. Зазвичай це не є проблемою, оскільки веб-браузери / сервери правильно інтерпретують новий рядок, чи це \ r, \ r \ n або \ n.

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

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


3

Використовуйте PHP nl2br для отримання нових рядків у текстовому рядку.

$ text = "Ману хороший хлопчик. (Введіть) Він може добре кодувати.

echo nl2br ($ текст);

Результат.

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

Він може добре кодувати.


1
nl2brФункція перетворює символи нового рядка в <br />HTML - тег. Якщо рядок не містить символів нового рядка, ця функція нічого не зробить! Більше того, питання полягає не в розриві рядка в абзаці в HTML. Йдеться про персонаж нового рядка !
— Дамієн Фламент

2

Я також спробував цю комбінацію як в одиночних, так і в подвійних лапках. Але жоден не спрацював. Замість використання \nкращого використання <br/>в подвійних лапках. Подобається це..

$variable = "and";
echo "part 1 $variable part 2<br/>";
echo "part 1 ".$variable." part 2";

Питання не в тому, щоб розбити рядок в абзаці в 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";

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.