这个问题困扰了我一段时间。假设我们有一个简单的 PHP 文件:
Line 0
Line 1
<?="Line 2"?>
Line 3
处理此文件将导致:
Line 0
Line 1
Line 2Line 3
换行后?>
去哪里了?在结束标记(例如 )之后放置一些字符时,换行符不会被吞噬?>.
。
有没有办法控制这种行为?我不愿意在结束标记之后放置空格,因为我的 IDE 配置为在换行符之前删除空格(我喜欢这样)。
确实是的:
如果存在,该块的结束标记将包括紧随其后的换行符。
http://php.net/manual/en/language.basic-syntax.instruction-separation.php
意思是,如果?>
是该行的最后一件事,则换行符将作为关闭 PHP 块的一部分被删除。您需要显式echo
换行或添加额外的换行。
这实际上是一个功能(信不信由你)。如果直接跟在 PHP 结束标记之后,PHP 会使用换行符:
如果存在,该块的结束标记将包括紧随其后的换行符。
这很明显是为了让以空行结尾的 PHP 文件不会导致当include
d 从另一个脚本时在输出中出现换行符。因此,在可预见的未来,这确实是一个“保护无知”的功能,我们必须忍受过去的日子。
如果您真的想要换行符,还有其他选择:从简单地在结束标记后添加两个换行符(第二个可以工作!)到从代码中回显一个换行符。
在<?php
and?>
标记之外,PHP 解释器在 HTML 模式下运行,HTML 模式内的间距问题比文本内容的问题要小。
要使用 PHP 生成文本,您应该使用纯字符串并以这种方式构建输出:
$var = "Line 2";
$s = "Line 0\nLine 1\n$var\nLine3";
至少这不会给你一个令人讨厌的,虽然有记录的,惊喜:)