6

这个问题困扰了我一段时间。假设我们有一个简单的 PHP 文件:

Line 0
Line 1
<?="Line 2"?>
Line 3

处理此文件将导致:

Line 0
Line 1
Line 2Line 3

换行后?>去哪里了?在结束标记(例如 )之后放置一些字符时,换行符不会被吞噬?>.

有没有办法控制这种行为?我不愿意在结束标记之后放置空格,因为我的 IDE 配置为在换行符之前删除空格(我喜欢这样)。

4

3 回答 3

5

确实是的:

如果存在,该块的结束标记将包括紧随其后的换行符。

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

意思是,如果?>是该行的最后一件事,则换行符将作为关闭 PHP 块的一部分被删除。您需要显式echo换行或添加额外的换行。

于 2013-01-23T15:11:58.237 回答
4

实际上是一个功能(信不信由你)。如果直接跟在 PHP 结束标记之后,PHP 会使用换行符:

如果存在,该块的结束标记将包括紧随其后的换行符。

这很明显是为了让以空行结尾的 PHP 文件不会导致当included 从另一个脚本时在输出中出现换行符。因此,在可预见的未来,这确实是一个“保护无知”的功能,我们必须忍受过去的日子。

如果您真的想要换行符,还有其他选择:从简单地在结束标记后添加两个换行符(第二个可以工作!)到从代码中回显一个换行符。

于 2013-01-23T15:12:06.790 回答
1

<?phpand?>标记之外,PHP 解释器在 HTML 模式下运行,HTML 模式内的间距问题比文本内容的问题要小。

要使用 PHP 生成文本,您应该使用纯字符串并以这种方式构建输出:

$var = "Line 2";
$s = "Line 0\nLine 1\n$var\nLine3";

至少这不会给你一个令人讨厌的,虽然有记录的,惊喜:)

于 2013-01-23T15:11:14.283 回答