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.