PHP阻止后缺少新行

时间:2012-02-28 13:46:46

标签: php

当我处理以下文件src.php时:

<?php
include "params.php";
?>
Str 1
val a = <?=$b?>
Str 3

params.php文件:

$b = 123;

$ php src.php > tgt.txt

我得到了结果:

Str 1
val a = 123Str 3

而不是

Str 1
val a = 123
Str 3

我怎么解决这个问题?我应该在<?=b?>后通过我的所有代码添加额外的换行符吗?

3 个答案:

答案 0 :(得分:4)

更新感谢adam:

$b = "123".PHP_EOL;

无论如何看起来你需要添加一个新行:)

答案 1 :(得分:3)

这是我之前遇到过PHP块处理方式的问题,据我所知,?>之后的第一个换行符始终被忽略。这可能是[需要引用]以避免在使用“仅代码”PHP文件时出现问题,这些文件会在include'时输出尾随换行符,例如:

-- some_file.php
<?php
// some class/function definitions, etc.
?>
+ trailing newline

-- some_other_file.php
include 'some_file.php'; // this would actually output a linebreak

由于很多UNIX编辑都喜欢搞乱你的空白,为了避免这个问题,这可能被认为是必要的“feature”。

<强> TL; DR:

我所知道的唯一解决方法是将换行符连接到输出

<?= $b.PHP_EOL ?>

或在HTML中添加另一个换行符

val a = <?= $b ?>

Str 3

这两种解决方案都很糟糕,但我不知道其他任何方式。

编辑:另一种方法是使用heredoc字符串:

echo <<<STUFF
Str 1
val a = $b
Str 3
STUFF;
// must be a break after `STUFF;`

这样格式化仍然很清晰,并且它的行为与您期望的一样(尽管对于heredocs的警告是在终止STUFF;之后必须有换行符,否则您将得到一个解析错误,在至少在5.4)。

答案 2 :(得分:0)

你为什么不试试:

val a = <?=$b."\n";?>
Str 3

或者只是:

val a = <?=$b;?><br/>
Str 3