这个问题让我困扰了一段时间。假设我们有一个简单的PHP-File:
Line 0
Line 1
<?="Line 2"?>
Line 3处理此文件将导致:
Line 0
Line 1
Line 2Line 3在?>之后,行进到了哪里?在结束标记后放置某些字符(例如?>.)时,换行符不会被吞噬。
有没有办法控制这种行为?我不愿意将空格放在结束标记之后,因为我的IDE被配置为删除换行符之前的空格(我喜欢这样做)。
发布于 2013-01-23 23:11:58
是的,确实是这样:
块的结束标记将包括紧随其后的换行符(如果存在)。
http://php.net/manual/en/language.basic-syntax.instruction-separation.php
这意味着,如果?>是一行中的最后一行,那么换行符将作为结束的PHP块的一部分被删除。您需要显式地echo一个换行符或添加一个额外的换行符。
发布于 2013-01-23 23:12:07
这个is actually a feature (信不信由你)。PHP使用换行符,如果它紧跟在PHP结束标记之后:
块的结束标记将包括紧随其后的换行符(如果存在)。
这显然是为了让一个以空白行结尾的PHP文件在从另一个脚本执行included时不会在输出中出现换行符。因此,这真的是一个来自过去的“保护无知者”的功能,在可预见的未来,我们必须与之共处。
如果您真的想要换行符,还有其他选择:从简单地在结束标记后添加两个换行符(第二个可以!)回显代码中的换行符。
发布于 2013-01-23 23:11:14
在<?php和?>标记之外,PHP解释器在HTML模式下工作,并且与文本内容相比,HTML模式中的空格不是问题。
要使用PHP生成文本,您应该使用普通字符串,并以这种方式构建输出:
$var = "Line 2";
$s = "Line 0\nLine 1\n$var\nLine3";至少这不会给你一个令人讨厌的惊喜,尽管是documented :)
https://stackoverflow.com/questions/14482765
复制相似问题