PHPで動的にHTMLを出力したときの現象
サーバは自分で立てたcentOS5.4(i386版)を使用しており、そこでホームページの作成をしております。
ホームページは、PHP5+XHTML+CSS+JavaScriptを使用しており、それぞれ別ファイルで作成してあります。
アクセス先はPHPで、そのPHP内にテンプレートを表示する処理を記述してあるのですが、PHPで動的に表示した状態のソースを見ると、生のHTMLの内容と違った状態で表示されてしまいます。
生のHTMLと動的に出力したHTMLのソースは下記の通りです。
生のHTML
=================
<?xml version="1.0" encoding="utf-8"?>
<!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" xml:lang="ja" lang="ja" dir="ltr">
<head>
・
・
・
動的のHTML
=================
?????????<?xml version="1.0" encoding="utf-8"?>
<!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" xml:lang="ja" lang="ja" dir="ltr">
・
・
・
動的に出力した状態ですと、ソースの最初に"?????????"という文字が表示されてしまいます。
PHPやHTMLなど、全てのファイルは
文字コード:UTF-8
で、HTMLとCSSは
改行コード:CRLF
で、その他のPHPやJavaScriptは
改行コード:LF
で作成しております。
php内では、
まずテンプレートを"openFile"で開き、
文字列置換($bodyはテンプレートファイル)
$body = str_replace("\\", "\\\\", $body);
$body = str_replace("\"", "\\\"", $body);
eval("\$body = \"$body\";");
をして、最後に
mb_http_output("UTF-8");
header("Content-type: text/html;charset=UTF-8");
print($body);
としてあります。
文字コードの関係で文字化けを起こしているため、最初に"?????????"とソースに表示されてしまっているのかと思うのですが、どこが原因なのか分かりません。
原因がお分かりになる方、同じ現象になったことのある方いらっしゃいましたら、ご教授のほどお願い致します。
お礼
解決しました。回答ありがとうございます。