以下是我的索引页面。 $ page在顶部定义,然后页面的部分(标题,菜单,正文和页脚)在底部更改。
我遇到的问题是在剩余的页面内容之前,DOCTYPE和数据没有先加载。这会导致浏览器以怪癖模式运行。
让我知道是否/如何使这个问题更清楚。
提前感谢您的时间!
更新: 我删除了所有PHP标记,并将require('includes / ....')设置为变量以消除页面加载。 DOCTYPE仍然拒绝加载。下面的代码反映了这些变化。
更新2: DOCTYPE现在直接与$ page变量对接,消除了所有空格。此外,在浏览器中查看时,我注意到,即使开口不是,也会显示。所有样式表和其他内容都在页面内呈现。
解: 解决方案可能是多个因素,正如多人所指出的那样(例如在DOCTYPE之前生成换行符),但我只能肯定地说最终答案如下: 调用$ page的外部文档未设置为变量。因此,它们似乎在页面之前加载。一旦我在其尊重文档中设置外部包含/要求变量,就正确加载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;
?>
答案 0 :(得分:4)
可能会发生这种情况,因为您在页面内容前面输出了很多空格。
如果您查看页面的来源,您应该在doctype之前看到几个空行。
由于PHP标记之间的换行符,换行符在页面内容之前输出。
例如:
<?
require('includes/functions/get_content.php');
require('includes/header.php');
require('includes/footer.php');
?>
<?
page='
在设置$page
变量的PHP标记之前输出一个换行符。
解决方案是消除php标记之间的所有换行符,因此在不需要时不要在PHP标记之间切换,或者确保开始标记和结束标记之间没有空行。
希望有所帮助。
答案 1 :(得分:2)
您的doctype之前仍有空格,此处
$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';
内容。
答案 2 :(得分:0)
确保您要求或不包含的任何文件都没有向浏览器输出任何内容。如果是,它们将在声明doctype之前输出,并且将被强制进入怪癖模式。