PHP删除新行

时间:2014-11-24 10:38:13

标签: php

运行此文件时:

works

fine
<?php echo 'except when it'; ?>

<?php echo 'does not'; ?>

我希望看到以下输出:

works

fine
except when it

does not

因为在第一个echo语句之后显然有2个换行符,而是打印出来:

works

fine
except when it
does not

如果除了php代码之外什么都没有,那么php会删除换行符吗?为什么会这样?

3 个答案:

答案 0 :(得分:2)

手册对此的唯一真实评论是:

  

块的结束标记将包括紧接着的新行(如果有的话)。

     

http://php.net/manual/en/language.basic-syntax.instruction-separation.php

含义,?>\n被视为块关闭分隔符,并且都从最终输出中删除。我希望这是在代码中删除不必要的空行:

<ul>
<?php foreach (..) ?>
    <li>..</li>

然而,它确实难以控制换行的输出,并且没有优雅的方法来解决它:

  • 在结束标记(?> \n)之后添加一个额外的空格,这会导致输出换行符(但也会输出空格)
  • 明确回显换行符
  • 在PHP块之后添加一个额外的换行符

答案 1 :(得分:0)

是的,这在尝试获得格式良好的HTML(例如

)时非常痛苦
<label>
    <?= $label ?>
</label>

,在这种情况下,其输出为

<label>
    This is label    </label>

因此必须有一个新的换行

<label>
    <?= $label ?>

</label>

这使代码更难看-或者,您可以“仅”在标签后添加一个空格,但这很愚蠢。好的,HTML无关紧要,但是如果您输出计划文本或某些结构化数据,则可能会出错。

我有一种有趣的感觉,在PHP的早期,对于一个需要换行的情况有一个不同的结束标记,但是我找不到任何引用。就像

<?= $label /?>

但是也许就在我的头上?

答案 2 :(得分:-2)

PHP部分本身不会输出任何换行符,因为您没有任何理由这样做。 您可以通过回显\n来显式输出换行符,如:

works

fine
<?php echo 'except when it\n'; ?>

<?php echo 'does not'; ?>

应该给出正确的结果。 当结束标记后跟\n时,\n将被视为结束标记的一部分,并从输出中删除。