(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的视图来源)时,那里看不到任何内容:
当页面的这一部分显示在Chrome的元素检查器中时,似乎有一些东西,但究竟是什么我无法分辨:
它似乎只是一个空字符串,但为什么一个空字符串会导致换行,为什么它会在那里首先出现是一个谜。在include语句的末尾添加分号没有任何区别。我想到它可能是一个空字节或13(CR),但仍然不会导致HTML换行。
有谁知道如何摆脱这个不受欢迎的换行线?
答案 0 :(得分:14)
检查包含的abc.php的编码 - 是否有字节顺序标记(BOM)?如果是这样,删除它(好的代码编辑器允许你在保存对话框中更改文件编码),这可能是罪魁祸首。
答案 1 :(得分:0)
依赖Chrome检查器检查原始输出不是一个好主意,因为树格式化了。使用 show source 稍微好一些。
这很可能与include()
本身无关。要采取的第一步是使用十六进制编辑器打开包含的文件,并检查它是否真正为空。正如Jens Roland指出的那样,它可以包含一个BOM,大多数文本编辑都会隐藏它。
您还可以使用此代码生成原始abc.php
文件,并针对它测试代码:
file_put_contents('abc.php', 'abc');
答案 2 :(得分:0)
我遇到了同样的问题。我在编辑器中发现了这个问题。请通过记事本或文本编辑器编辑并保存包含的文件。你会看到变化。