php包括导致不需要的换行符

时间:2011-08-10 07:48:13

标签: php php-5.3

(PHP 5.3.6)

我有一个只包含此文本的php文件 - 没有任何php标记,没有尾随的换行符或任何无关的空格:

<div style="border:1px solid green">abc</div>

现在从另一个php文件中包含这个如下(再次,没有任何无关的空格):

<div style="border:1px solid red"><?php include "abc.php" ?></div>
<br />
<div style="border:1px solid red"><div style="border:1px solid green">abc</div></div>

我得到以下结果。

请注意,第二种方法只是直接使用包含的内容。这些应该像下面的那样,但正如你所看到的那样,include会导致在包含文件的内容之前插入一些奇怪的换行符。我说“很奇怪”,因为当我查看输出的来源(通过Chrome的视图来源)时,那里看不到任何内容:

enter image description here

当页面的这一部分显示在Chrome的元素检查器中时,似乎有一些东西,但究竟是什么我无法分辨:

enter image description here

它似乎只是一个空字符串,但为什么一个空字符串会导致换行,为什么它会在那里首先出现是一个谜。在include语句的末尾添加分号没有任何区别。我想到它可能是一个空字节或13(CR),但仍然不会导致HTML换行。

有谁知道如何摆脱这个不受欢迎的换行线?

3 个答案:

答案 0 :(得分:14)

检查包含的abc.php的编码 - 是否有字节顺序标记(BOM)?如果是这样,删除它(好的代码编辑器允许你在保存对话框中更改文件编码),这可能是罪魁祸首。

答案 1 :(得分:0)

依赖Chrome检查器检查原始输出不是一个好主意,因为树格式化了。使用 show source 稍微好一些。

这很可能与include()本身无关。要采取的第一步是使用十六进制编辑器打开包含的文件,并检查它是否真正为空。正如Jens Roland指出的那样,它可以包含一个BOM,大多数文本编辑都会隐藏它。

您还可以使用此代码生成原始abc.php文件,并针对它测试代码:

file_put_contents('abc.php', 'abc');

答案 2 :(得分:0)

我遇到了同样的问题。我在编辑器中发现了这个问题。请通过记事本或文本编辑器编辑并保存包含的文件。你会看到变化。