PHP-тег "съедает" следующий за ним перенос строки

Valery Shostak

Новичок
PHP-тег "съедает" следующий за ним перенос строки

Почему закрывающий php-тег "съедает" следующий за ним перенос строки?...

Есть код:
PHP:
text
<?=date('Y')?>
text
Он выдаёт:
PHP:
text
2006text
Как сделать, чтобы он выдавал такой результат?
PHP:
text
2006
text
Варианты:
PHP:
text
<?=date('Y')."\n"?>
text
и

PHP:
text
<?=date('Y')?>

text
не подходят.
 

Сергей123

Новичок
В HTML'е для переноса строки есть специальный тег.
По-другому ты не покажешь перенос.
HTML - это не обычный текст.
Нужен перенос в браузере - выдавай в HTML'е этот тег (найдёшь).
 

SelenIT

IT-лунатик :)
Valery Shostak
А чем именно не подходит, скажем, второй вариант?

Бресь Сергей
AFAIK, проблема есть как раз в обычном тексте.
 

Valery Shostak

Новичок
Автор оригинала: Бресь Сергей
В HTML'е для переноса строки есть специальный тег.
По-другому ты не покажешь перенос.
HTML - это не обычный текст.
Нужен перенос в браузере - выдавай в HTML'е этот тег (найдёшь).
Вы меня не совсем поняли... Я имел в виду не то, как это выглядит в HTML, а как это вглядит в исходном коде. Ну, или, в HTML в тегах <pre></pre>.

-~{}~ 13.04.06 13:35:

Автор оригинала: SelenIT
Valery Shostak
А чем именно не подходит, скажем, второй вариант?
Первый не подходит по удобству, второй — чисто эстетически.
 

Сергей123

Новичок
SelenIT, угу, понял, о чём он...

-~{}~ 13.04.06 12:49:

Хм... Единственное, что я нашёл на эту тему в мане, - "when PHP hits the ?> closing tags, it simply starts outputting whatever it finds until it hits another opening tag". Правда, там немного о другом речь и, в любом случае, видимо, это не совсем так.
Подозреваю, тем не менее, что с этим чудовищным багом :) вполне можно мириться.
 

Valery Shostak

Новичок
Автор оригинала: McSimm
Это не баг, так и задумано и задокументировано

PHP Manual. Basic syntax.Instruction separation

The closing tag for the block will include the immediately trailing newline if one is present.
Так, разве после закрывающего php-тега не следует символа переноса строки? Если бы его не было, то код выглядел бы так:
PHP:
text
<?=date('Y')?>text
 

bgm

&nbsp;
Удивительно, но пример визуально выводится именно на трёх строках:
PHP:
<pre>
text 
<?=date('Y')?> 
text
</pre>
 

McSimm

Новичок
Вы неправильно интерпретировали фразу.
"Закрывающий тэг для блока включает в себя и непосредственно следующий за ним символ новой строки, если таковой имеется."

Т.е. если и есть, то он относится к тэгу. Это сделано, для удобства нормального форматирования (безпроблемного разделения блоков PHP и HTML), кроме того, это позволяет иметь пустую строку в конце подключаемого (include) файла и она не будет отправлена в буфер вывода.

Если нужен перевод строки, просто сделайте два. Один уйдет на "форматирование", второй в буфер вывода.

-~{}~ 13.04.06 16:01:

bgm
Если в вашем примере непосредственно после закрывающего тэга будет идти перевод строки, то вывод будет в две строчки.
У вас после закрывающего тэга идет пробел. Поэтому перевод строки не относится к блоку.
 
Сверху