1

以下は私のインデックスページです。$page は上部で定義され、ページのセクション (ヘッダー、メニュー、ボディ、フッター) は下部で変更されます。

私が直面している問題は、残りのページ コンテンツの前に、DOCTYPE とデータが最初に読み込まれないことです。これにより、ブラウザが互換モードで実行されます。

この質問をより明確にすることができるかどうか、またはその方法を教えてください。

お時間をいただきありがとうございます。

更新: すべての PHP タグを削除し、require('includes/....') を変数に設定して、ページの読み込み時に削除しました。DOCTYPE はまだ読み込みを拒否しています。以下のコードは変更を反映しています。

更新 2: DOCTYPE が $page 変数に直接突き合わされ、すべての空白が削除されました。また、ブラウザで表示すると、オープニングが表示されていないのに が表示されていることに気付きました。すべてのスタイルシートとその他のコンテンツは、ページ内にレンダリングされます。

解決策:複数の人が指摘したように、解決策は複数の要因である可能性があります(DOCTYPEの前に改行が生成されるなど)が、最終的な答えは次のとおりであると確信できます。ページが変数に設定されていませんでした。したがって、それらはページの前にロードされているように見えました。外部の include/requires を関連ドキュメントの変数に設定すると、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='

$page変数を設定する PHP タグの前に 1 つの改行を出力します。

解決策は、php タグ間のすべての改行を削除することです。そのため、不要な場合は PHP タグを切り替えないか、開始タグと終了タグの間に空の行がないことを確認してください。

それが役立つことを願っています。

于 2012-12-05T22:25:04.460 に答える
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';には、含まれているファイルに次のようなものが必要です。

于 2012-12-05T22:45:22.030 に答える
0

Make sure that none of the files that you are requiring or including are not outputting anything to the browser. If they are, they will be outputted before the doctype gets declared and it will be forced to enter quirks mode.

于 2012-12-05T22:33:00.597 に答える