1

下面是我的索引页。$page 在顶部定义,然后页面的各个部分(页眉、菜单、正文和页脚)在底部更改。

我遇到的问题是 DOCTYPE 和数据没有先加载,然后是剩余的页面内容。这会导致浏览器以怪癖模式运行。

让我知道是否/如何使这个问题更清楚。

在此先感谢您的时间!

更新:我已删除所有 PHP 标记,并将 require('includes/....') 设置为变量以消除页面加载。DOCTYPE 仍然拒绝加载。下面的代码反映了这些变化。

更新 2:DOCTYPE 现在直接与 $page 变量对接,消除了所有空格。另外,在浏览器中查看时,我注意到显示了,即使没有打开。所有样式表和其他内容都在页面内部呈现。

解决方案:解决方案可能是多个因素,正如多人指出的那样(例如在 DOCTYPE 之前生成换行符),但我只能肯定地说最终答案如下:外部文档被调用到 $页面未设置为变量。因此,它们似乎在页面之前加载。一旦我将外部包含/要求设置为相关文档中的变量,DOCTYPE 就会正确加载。我非常感谢你们的时间。

<?
require('includes/functions/get_content.php');
$header=require('includes/header.php');
$footer=require('includes/footer.php');

$page='<!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>
<title>Website Name</title>

<link rel="stylesheet" href="/css/primary_layout.css" type="text/css" charset="utf-8" />
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.0.min.js" type="text/javascript"></script>
</head>

<body>
<div id="bodyContainer">                
%HEADERS%

%MENU%

<div id="bodyContentPane" role="main">
%BODY%
</div> <!-- Close bodyContentPane -->
%FOOTER%
</div>
</body>
</html>';

//############### LOAD BODY CONTENT and SET CATEGORY ###############
$p = $_GET['p'];
switch ($p){ 
case "port-a-cool":
$filename='includes/content1.html';
$data=get_content($filename);
$product_category = '1';
$body=$data;
break;

case "radiant-heaters":
$filename='includes/content2.html';
$data=get_content($filename); 
$product_category = '2';
$body=$data;
break;

default:
$body= include('includes/index.php');
break;
}

//############### DEFINE CONTENT TO LOAD BY CATEGORY ###############
$i = $product_category;
switch ($i){
case "1":
$menu=include('includes/menus/content1.php');
break;
case "2":
$menu=include('includes/menus/content2.php');
break;  }

// ############### CHECK FOR UNDEFINED SUB MENU ###############
if ($menu=="")
$menu = include ('includes/menus/default.php');

$page=str_replace('%HEADER%',$header,$page); 
$page=str_replace('%MENU%',$menu,$page); 
$page=str_replace('%BODY%',$body,$page);
$page=str_replace('%FOOTER%',$footer,$page); 
echo $page;
?>
4

3 回答 3

4

这可能是因为您在页面内容前面输出了很多空白。

如果您查看页面的源代码,您应该会在 doctype 之前看到几个空行输出。

由于 PHP 标记之间的换行符,换行符在页面内容之前得到输出。

例如:

<?
require('includes/functions/get_content.php');
require('includes/header.php');
require('includes/footer.php');
?>

<?
page='

在设置变量的 PHP 标记之前输出一个换行符$page

解决方案是消除 php 标签之间的所有换行符,因此要么在不需要时不要在 PHP 标签之间切换,或者确保开始标签和结束标签之间没有空行。

希望有帮助。

于 2012-12-05T22:25:04.460 回答
2

你的文档类型之前仍然有空格,这里

$page='
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

删除空格

$page='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

注意:$header=require('includes/header.php');要返回内容,您必须return 'the content';在包含的文件中有类似的内容。

于 2012-12-05T22:45:22.030 回答
0

确保您需要或包含的所有文件都没有向浏览器输出任何内容。如果是,它们将在 doctype 被声明之前被输出,并且将被强制进入 quirks 模式。

于 2012-12-05T22:33:00.597 回答