2012-02-23 4 views
2

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

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

<?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 
?> 

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

+0

Невозможно воспроизвести, выход выглядит хорошо: http://codepad.org/7Oogl3hY;) – hakre

ответ

5

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

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

UPDATE

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

$output = nl2br($output); 
print $output; 
+3

и не забывайте, что функция nl2br() –

+0

@MarkBaker. Хорошая точка. Обновление ... – rdlowrey

4

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

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

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

Смежные вопросы