PHP include导致页面顶部有空白区域。

29

我在制作一个网站时遇到了问题。我的页面顶部有一条白色空白行,但我找不到它来自哪里。这可能是因为我的页面中有额外的换行符,感谢PHP include() 或者可能只是一些错误的CSS代码导致的。


1
但正如你所说,既然你也有 PHP 代码,请也提供它! - hjpotter92
15个回答

41

我明白了!我必须承认,这是一个非常奇怪的问题。

这篇文章详细介绍了我的问题,并且他的解决方案完美地解决了它。


问题出在include()上面。

当你将页面保存为UTF-8时,会在文件开头包含一个特殊的签名,称为字节序标记(或BOM),表示它是一个UTF-8文件。只有使用低级文本编辑器(如DOS编辑器)才能看到BOM。你需要从被包含的文件中删除此签名,以消除页面顶部的空格。

DOS编辑器


这个签名被称为字节顺序标记或BOM。它是PHP开发人员的噩梦,但也可能影响几乎任何其他UTF-8文件。 - BoltClock
在 Mac 上,只需创建一个 UTF8 文件并复制粘贴文本即可。新文件将不再包含此 BOM。 - iluvatar_GR
Notepad++ 在这方面真是救了我的命——只需从编码菜单中选择 UTF-8 就可以了。虽然他们还有带 BOM 的 UTF-8 类型,但从编码菜单中选择的 UTF-8 不会带上 BOM。 - Michael Cantrall

14
在Notepad ++中,您可以从“编码”菜单更改文件的编码为“UTF-8 without BOM”。这对我来说解决了问题。

不是我的问题,我已经改用带有Unix EOL的Latin1编码,唯一有效的方法是从被包含的文件中删除闭合标签“?>”。实际上,明智地使用printf()函数可以显示出被包含文件和主体之间插入的空格。 - mckenzm

10
  1. 在Notepad++中打开文件

  2. 从顶部菜单选择:编码->以UTF8无BOM格式编码

  3. 保存文件

在Dreamweaver中

按CTRL + J或前往修改->页面设置->标题/编码并取消选中UNICODE BOM如果已经选中。


4
首先,您缺少DOCTYPE声明...您还没有指定字符编码。
除此之外,请确保如果您已将文件保存为UTF-8,则文件开头不应有BOM。还要确保您没有留下任何空行(尽管空格可能会被忽略,否则我所编写的每个布局都会破裂)。

3
由于某些原因,在您的body标签之前,第一个div之后有一些奇怪的字符...只需删除它们并根据需要重新缩进。具体来说,是字符...(如果您检查页面的HTML,可以在Firebug中看到它...但在视图源代码中无法看到它,因为它呈现为空格)。
与对齐问题无关...您的登录/注册链接之后还有一个不匹配的闭合</li>标记。

哇,那速度真快。但不幸的是,我没有把那个字符放到我的页面中,所以我无法删除它。你有什么建议吗?哦,还有谢谢,我已经修复了那个不匹配的 </li> - Daniel Node.js
抱歉耽搁了,但我猜你已经解决了吧?我再也看不到那个额外的字符了。 - scunliffe
是的。看我的回答。我已经移除了这个字符。 - Daniel Node.js

3

重要提示:如果你的网站上有多个使用utf-8编码的php页面,你需要确保将每一个单独的页面的编码更改为“使用utf-8编码而不带BOM头”。


3

你可以通过以下方式解决这个问题...

根据Scunliffe所说... 你可以避免使用这个字符... 例如

$file = file_get_contents('header.php');
$file = substr($file, 3, strlen($file));
echo $file;

所以,你正在跳过这个错误...

祝好


非常感谢,tanX...太好了...问题已经解决...^_____________________________^非常感谢。 - Erfan Safarpoor

1

是的,在任何其他内容之前都包含了额外的空格。

我可以向您推荐使用输出缓冲吗?这样您将获得对推送到客户端的内容的精细控制。


0

尝试这个,这是我知道的最好的想法,干杯

<div style="position:absolute;">
<?php include("conn.php"); ?>
</div>
<!DOCTYPE html>

0

这个问题也困扰了我很长时间,直到我找到了一个非常简单的解决方法。

这个问题是由于BOM字符引起的,它用于告诉文本文件的代码页和字节序。当你包含一个PHP文件时,这个字符也会被包含进来。虽然你看不到BOM字符,但它可能导致页面上的间隙。

我的解决方法在这里。 你不需要从文件中删除这个字符。你只需要像这样操作:

<!-- <?php
include_once (dirname(__FILE__) . "/_include.php");
?> -->

使用HTML注释标记来包装包含其他PHP文件的PHP代码。BOM字符将被视为注释并不会出现在页面上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接