7

我不知道为什么每次我尝试使用 PHP 包含我的标头时include都会出现上边距。我使用 Firebug 检查了它,它说顶部有 22px 的偏移边距。有人遇到这个问题吗?我认为这是一个 CSS 属性:顶部:22px。但即使我写了 h1 style="top: 0px; margin-top: 0px;" 也无法改变它。我认为这是一个永远无法解决的 php-CSS 之谜。

编辑:摆脱上边距偏移或其他任何东西的唯一方法是将以下属性添加到H1:top:0px; 位置:绝对;

这些属性在未来会产生更多问题吗?

有没有更好的方法来解决这个顶部边距偏移问题?

edit2:我认为编码有问题。包含文件(header.html)和索引文件的编码是否有冲突?

我的索引是这样的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <title>Untitled 1</title>
    <link rel="stylesheet" type="text/css" href="style2.css" />
</head>
<body>
    <div id="page-wrap">
    <?php include_once("header2.html"); ?>
    </div>
</body>
</html>

使用这个 CSS:

* {
    padding: 0px;
    margin: 0px;
}

我的header.html(包含的那个):

<h1>Header 2</h1> 

这就是输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <title>Untitled 1</title>
    <link rel="stylesheet" type="text/css" href="style2.css" />
</head>
<body>
    <div id="page-wrap">
    &lt;h1>Header 2</h1>  </div>
</body>
</html>
  • 上帝太简单了,我真的不知道上边距来自哪里(在所有浏览器中)。
  • 只有当我使用 php 包含时才会发生这种情况。
  • 源代码看起来与我不使用 php 包含时相同。
4

12 回答 12

16

这很奇怪,但是我将您的输出 HTML 复制并粘贴到了 Notepad++ 中,并且在 h1 之前有一个奇怪的字符。将其粘贴到记事本中时,h1 中的 h 是下标的。

因此,在我看来,您包含的 HTML(或包含它的 PHP)中可能有一个错误的(或 PHP 意外的)字符。我的怀疑?可怕的 UTF-8 BOM。尝试更改包含的 HTML 文件的编码以消除 BOM(我在处理 PHP 时总是遇到问题)。

编辑:是的。刚刚用十六进制编辑器验证。包含的 HTML 的开头有一个字节顺序标记。我不知道您使用哪个编辑器,但您应该可以选择更改文本编码设置。

有关 PHP 和 BOM 的更多信息,请参阅此内容。

于 2009-06-13T20:59:15.363 回答
3

您应该发布您生成的HTML,例如复制您从 Web 浏览器中选择“查看源代码”时看到的内容。我经常在 PHP 生成的 HTML 中看到神秘的空白行,因为 PHP 被配置为输出错误和警告。即使这不是由此引起的,如果我们看到输出的 HTML,我们也可以更轻松地诊断问题。

于 2009-06-13T19:02:04.473 回答
2

我遇到了同样的问题......所以我解决它的方法是在第一个文件的开头添加一个 html 开始注释,在第二个文件的开头添加一个 html 结束注释。这将 BOM(或文件之间出现的任何内容)包含在注释中,因此它不会以 html 格式输出。

例如:

#header.php
<?php ?>
<html>
<!--

#body.php
<?php ?>
-->
<body>
...

我试图解决在记事本++中的编码格式之间转换的问题,但无济于事。所以这只是一个临时解决方案,直到我找到更好的解决方案。

于 2012-02-14T02:24:13.363 回答
1

好吧,不知道你的 php 包含什么,很难说,但要确保它里面没有 CSS。还要确保您正在加载的 CSS 被找到并加载。我通过更改背景颜色或其他视觉效果进行调试,因此您可以确定它正在加载。

于 2009-06-13T18:49:36.220 回答
1

我敢打赌它与 php 无关,包括它的自我。如前所述,包含的文件中可能有一些 css 正在执行此操作,但我从未见过 php 像您所描述的那样。

我会查看 doctype 声明 [暂时将其删除以查看会发生什么],然后删除当前的 html 声明标记并将其替换为纯 <html> 标记[再次只是暂时的,以进行调试]

于 2009-06-13T19:40:33.430 回答
1

很多时候,一个额外的新行将出现在您包含在 ?> 标记之后的 PHP 脚本文件的末尾。这将导致生成的输出中包含一个额外的字符。您可以通过在文件的最后没有关闭 ?> 标记来解决此问题。PHP 知道“假设”它已关闭。

于 2009-06-13T20:08:46.937 回答
0

您可以选择给我们一个链接吗?我只是在本地尝试了几件事,如果有不可打印的字符,您可能会因为在您的内容和“doctype”声明之间显然“没有理由”而得到这个“不需要的”新行。尝试删除“>”之后的所有字符并用十六进制编辑器查看它以确保它。请向我们提供更多信息。

于 2009-06-13T18:49:41.353 回答
0

那很有趣,因为我刚刚使用了你的标记和你的 CSS。我还将它放入一个 php 文件并包含一个 html 文件。但是没有余量。无处。

因此,请确保您的浏览器能够找到 css 文件 * { margin: 0; padding: 0 }

我建议您使用像这样的重置表 - http://meyerweb.com/eric/tools/css/reset/index.html

ps 如果您拥有一些网络空间,请将其放到网上并给我们发送链接。

于 2009-06-13T20:59:04.880 回答
0

Dreamweaver 的自动 BOM 添加让我抓狂。这是修复:

http://www.adobe.com/support/documentation/en/dreamweaver/mx2004/dwusing_errata/dwusing_errata2.html

于 2010-06-14T22:04:09.217 回答
0

我几乎杀死了我试图解决问题的键盘。然后我尝试了PSPad 编辑器,明确更改.inc或更改.phpUTF-8它工作!

于 2012-02-11T09:32:31.983 回答
0

我正在使用记事本,我从菜单中选择 -> 编码 -> 使用 UTF-8 编码而不使用 BOM,它工作得很好。这应该对每个包含的文件进行。我认为这是解决您问题的方法。祝你有个美好的夜晚。

于 2012-06-30T20:43:39.430 回答
0

我曾经遇到过这个问题,这是解决它的方法-它在字符集中确实存在问题。我花了 10 个小时才找到它。在我的情况下,我将所有 php 文件(所有 php 文件,所有 tpl(如果有)文件)字符集从 UTF-8 更改为 UTF-8,没有 bom,然后保存并尝试。之后,您还可以在 .htaccess 字符串中创建“AddDefaultCharset UTF-8”。

于 2013-07-20T17:14:22.263 回答