PHP Linefeeds (\ n) не работает - PullRequest
29 голосов
/ 10 июня 2010

Почему-то я не могу использовать \n для создания перевода строки при выводе в файл с PHP.Он просто пишет "\n" в файл.Я также попытался использовать "\\n", где он просто пишет "\ n" (как и ожидалось).Но я не могу понять, почему добавление \ n к моим строкам не создает новые строки.Я также пробовал \r\n, но он просто добавляет "\r\n" к строке в файле.

Пример:

error_log('test\n', 3, 'error.log');
error_log('test2\n', 3, 'error.log');

Выходы:

test\ntest2\n

Использование MAMP на OSX в случае, если это имеет значение (может быть, какая-то конфигурация PHP?).

Есть предложения?

Ответы [ 10 ]

47 голосов
/ 10 июня 2010

Используйте двойные кавычки. "test\n" будет работать просто отлично.

Если строка заключена в двойные кавычки ("), PHP будет интерпретировать больше escape-последовательностей для специальных символов:

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

26 голосов
/ 28 февраля 2013

\n не должен рассматриваться конечным пользователем как новая строка, для этого необходимо использовать элемент html <br/>. Параметр / n влияет только на то, как HTML, сгенерированный php, появляется в исходном коде веб-страницы. если вы зайдете на свою веб-страницу и нажмете «просмотреть исходный код», вы увидите сгенерированный php html как одну длинную строку Не красиво Вот что \n для ; , чтобы разбить этот HTML-файл, созданный php, на более короткие строки. Цель \n - сделать красивую страницу просмотра источника.

8 голосов
/ 02 января 2015

Когда вы запускаете скрипт PHP в браузере, он будет отображаться как HTML по умолчанию.Если используемые вами книги показывают иное, то либо код, либо иллюстрация неточны.Вы можете использовать «просмотр источника» для просмотра того, что было отправлено в браузер, и вы увидите, что ваши переводы строки присутствуют.

<?php
echo "Line 1\nLine 2";
?>

Это будет отображаться в вашем браузере как:

Line 1 Line 2

Если вам нужно отправить простой текст в ваш браузер, вы можете использовать что-то вроде:

<?php
header('Content-type: text/plain');
echo "Line 1\nLine 2";
?>

Это выдаст:

Line 1
Line 2
6 голосов
/ 17 июля 2012

Я уверен, что вы выводите в HTML-файл. Проблема в том, что html игнорирует новые строки в источнике, что означает, что вы должны заменить новые строки на <br/>, если вы хотите, чтобы новая строка отображалась на получающейся странице.

4 голосов
/ 25 сентября 2014

nl2br() функция использования для создания новой строки

echo nl2br("Welcome\r\n This is my HTML document", false);

Приведенный выше пример выдаст:

Добро пожаловать
Это мой HTML документ

3 голосов
/ 10 июня 2010

Вам нужно использовать двойные кавычки.Двойные кавычки имеют больше escape-символов.

error_log("test\n", 3, 'error.log');
error_log("test2\n", 3, 'error.log');
2 голосов
/ 30 октября 2013

для размещения \n в двойных кавычках попробуйте


$LOG = str_replace('\n', "\n", $LOG);
2 голосов
/ 10 июня 2010

Двойные кавычки - это то, что вы хотите. Одиночные кавычки игнорируют экранирование \. Двойные кавычки также оценят переменные выражения для вас.

Проверьте эту страницу в руководстве по PHP для более.

2 голосов
/ 10 июня 2010

Это потому, что вы используете апострофы ('). Вместо этого используйте кавычки (")." Предлагает PHP использовать буквально все, что находится между апострофами.

0 голосов
/ 22 мая 2015

Если вы хотите напечатать что-то вроде этого с новой строкой (\ n) после него:

<p id = "theyateme">Did it get eaten?</p>

Чтобы напечатать вышеупомянутое, вы должны сделать это:

<?php
  print('<p id = "theyateme">Did it get eaten?</p>' . "\n");
?>

Код клиента сверху будет:

<p id = "theyateme">Did it get eaten?</p>

Вывод сверху будет:

Это съели?

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

Иногда требуется, чтобы PHP печатал \ n на странице, а не вводил новую строку, как в коде JavaScript (создан PHP).

ПРИМЕЧАНИЕ об ответе: Вы можете спросить: почему вы использовали печать вместо эха (мне нравится мое эхо). Это потому, что я предпочитаю print, а не echo и printf, потому что в некоторых случаях это работает лучше (обычно в моих случаях), но в этом случае это можно сделать с помощью echo.

...