当我处理以下文件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?>
后通过我的所有代码添加额外的换行符吗?
答案 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