PHP页面中的随机空白(客户端接收到的页面,而不是客户端接收到的源代码),但仅在使用include()时使用


Random whitespace in a PHP page (the client received page, but not the client-received source-code), but only when I use an include()

好吧,我遇到了史上最奇怪的问题。我正在制作一个在HTML中完美工作的网站,但是从PHP中渲染时却有一些非常奇怪的行为-尽管有完全相同的客户端源代码(我逐字逐句地经历了它)。

起初我以为我在我的'functions.php'文件中搞砸了一些东西,我包括,但我没有得到任何错误,当我复制&粘贴该文件的内容到include('functions.php');关键是,问题就解决了。

这是我的代码(删除了一些HTML,这是所有的PHP):
<?php
    error_reporting(E_ALL);
    ini_set('display_errors','1');
    include 'functions.php';
    $footer = file_get_contents('footer.txt');
?>
<!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 http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>Removed</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/jquery-ui.min.js"></script>
    <script type="text/javascript" src="js/main.js"></script>
    <link type="text/css" rel="stylesheet" href="css/jquery-ui-custom.css" />
    <link type="text/css" rel="stylesheet" href="css/main.css" />
</head>
<body>
    <div id="header">
        <div id="headerContent">
        <div id="logo">
            &nbsp;
        </div>
<?php
    echo trim(GetNav());
?>
        </div>
    </div>
    <div id="content">
<?php
    $NumberOfNewsItems = 2;
    echo trim(GetNews($NumberOfNewsItems));
?>
    </div>
<?php
    echo trim($footer);
?>
</body>
</html>

函数GetNav和GetNews从数据库中获取信息,所以我不打算显示他们的代码,另外,正如我之前提到的,如果我不包括文件,而是将它的内容复制到我进行include调用的地方,然后大部分空白消失(仍然有一些地方'echo $footer'调用是。

基本上,当您查看源代码时,一切看起来都很好。当你按下F12查看开发工具时,元素选项卡显示了一大堆额外的空白(由双引号包围),紧跟在标签之后(这会影响网站的外观),以及在页脚和内容div之间(这再次影响网站的外观)。

同样在这个视图中,来自的所有标签都在第一组空白的下面,并且标签是空的(例如:<head></head>)。

源代码看起来很好(如果我把源代码复制粘贴到一个HTML文件中,它会完美地工作),我不得不承认这让我抓狂。

请帮帮我,欧比旺-克诺比,你是我唯一的希望(是的,我喜欢《星球大战》,尽管我希望他们能拍三部以上)。

注:这可能是非常明显的,但我是一名。net开发人员,在业余时间为家人做这件事(学习新语言很有趣,即使是那些过于喜欢$符号的语言),所以如果我是世界上最大的新手,请提前道歉。

编辑:我在开发工具中看到的是:

<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
"

      "
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>Removed</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/jquery-ui.min.js"></script>
    <script type="text/javascript" src="js/main.js"></script>
    <link type="text/css" rel="stylesheet" href="css/jquery-ui-custom.css" />
    <link type="text/css" rel="stylesheet" href="css/main.css" />

等。

EDIT2:只是要清楚,我不关心什么开发工具显示,这只是我得到空白显示这些引号在实际网站上,除了一切都是完美的。

EDIT3:另外,空白不能用元素选择器点击,并且在元素选项卡中选择空白不会突出显示网站上的任何内容。然而,在元素选项卡中删除它确实修复了网站(直到它明显地重新加载),但显然不能帮助我解决我的问题。

尝试删除functions.php文件中的?>,并且代码后面没有空白行。php与主文件在同一个目录下吗?

还有一个小提示,用footer.php代替file_get_content:-)

我不能以一种让我满意的方式修复这个问题,但这里是我实现的解决方案:

我完全从头文件中删除了include,并将functions.php拆分为每个函数一个文件,只在需要调用它们的地方包含它们。

这减轻了我的问题,虽然它不是理想的。很高兴我不用每天都用PHP:).

我也有同样的问题,在控制台上html的源代码看起来像:

通过检查编码,一些文件用utf-8编码,一些用big5编码。通过将这些文件保存为utf-8(没有bom),为我解决了这个问题。

我使用了Sublime Text 2和来自包管理器的EncodingHelper来查看当前的文件编码。

希望能有所帮助。