PHP heredoc не сохраняет формат - PullRequest
2 голосов
/ 23 февраля 2012

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

После просмотра другого кода программист вставил серию, которые я пробовал (используявместо этого) и получил некоторые результаты, которые я искал.Я ожидаю слишком многого?Я никогда не мог заставить ведущие пробелы и табуляции работать.Может ли это быть проблемой настройки?

<?php
$author = "Alfred E Newman";

$out = <<<_END
       This is a Headline

   This is the first line.
   This is the second.
      - Written by $author.
_END;

print $out;
// echo $out; // ... didn't format as expected either
?>

Результат: Это заголовок Это первая строка.Это второе.- Автор Альфред Э Ньюман.

Ответы [ 2 ]

5 голосов
/ 23 февраля 2012

Если вы выводите в HTML, попробуйте заключить вызов print в теги <pre>.Браузер не обращает внимания на символы новой строки ОС при отображении HTML. НО , если вы просматриваете исходный код страницы, вы увидите там форматированный результат, как и ожидалось.

Если вы хотите, чтобы новые строки отображались в вашем HTML, вам придется использовать <br/> или <p> или соответствующий механизм стилевого оформления CSS.

ОБНОВЛЕНИЕ

Ох, и я забыл!Как всегда упоминал бдительный @MarkBaker (спасибо), PHP-функция nl2br docs выполнит для вас такую ​​операцию, заменив символы новой строки на <br/> теги:

$output = nl2br($output);
print $output;
4 голосов
/ 23 февраля 2012

Просто добавьте header('Content-Type: text/plain;'); поверх вашего скрипта:

<?php
header('Content-Type: text/plain;');
$author = "Alfred E Newman";
...

Это говорит вашему браузеру, что он должен отображать вывод в виде простого текста (не в формате HTML).

...