サーバは自分で立てた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-transitio …
<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-transitio …
<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);
としてあります。
文字コードの関係で文字化けを起こしているため、最初に"?????????"とソースに表示されてしまっているのかと思うのですが、どこが原因なのか分かりません。
原因がお分かりになる方、同じ現象になったことのある方いらっしゃいましたら、ご教授のほどお願い致します。
No.2ベストアンサー
- 回答日時:
yambejpさん
ご回答、ありがとうございます。
仰る通り、BOMが原因でした。
そもそも、今までBOMという存在のことを知りませんでした。
PHPやHTMLなど、全て文字コードをUTF-8にしていたのですが、"UTF-8"はBOMが付いてくるということを知り、それら全てを"UTF-8N"に変更しました。
そうしたところ、ソースの最初に表示される???????というものがなくなりました。
また余談ではありますが、UTF-8の状態でBOMを無くすPHPのサンプルソースを配布しているサイトがいくつかありました。
どうしてもUTF-8でなくてはならない場合、そちらでも対応可能かと思います。
問題が解決でき、非常に助かっております。
どうもありがとうございました。
No.1
- 回答日時:
力作業ですが、phpの各行にprint("1");などと入れていくと、犯人が分かるのでは
ないでしょうか?
Tasuke22さん
迅速なご対応、ありがとうございます。
問題ですが、ANo.2の方で解決することができました。
詳しくはそちらをご覧いただければと思いますが、原因は文字コードをUTF-8にしているためのBOMでした。
文字コードをUTF-8Nにすることで、対応することができました。
今回は上記の方法で解決できましたが、PHPの規模が大きくなるにつれて、どこでエラーが起きているのか分からなくなることがたまにあるかと思います。
そういったときなどに、printやexitなどを使うことは地道ではありますが、ときには必要だったりもしますよね。。
今後は、そういったデバッグもした上で、質問をしていきたいと思います。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- ASP・SaaS FC2 BLOG <AUDIO TAGを入れプレビューはOk テーンプレートを更新すると ✖ 1 2023/08/14 11:40
- HTML・CSS (Javascript)印刷するファイルに応じて印刷プレビュー画面で用紙を自動的に切り替えたい!! 2 2022/04/11 12:04
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
generatorとは?
-
htmlのタブの色変更について
-
VBAで#Regionに変わるものは無...
-
Htmlをieの「Excelで編集」で編...
-
VB詳しい方
-
google Map APIの使い方
-
ホームページのソースが横長に...
-
VisualBasicがインストールされ...
-
時間ごとにリンク先を変更させたい
-
ソースの表示を無効にする方法。
-
VisualStudio2010でデバッグソ...
-
ホームページビルダーのソース...
-
innerHTML で表示変更した時の...
-
コンソールアプリの入出力
-
コメントが閉じてないというエ...
-
HTMLソースを他人に見られない...
-
Doxygenでの更新履歴(@history...
-
#ifdef多用でソースが見づらい
-
文字化けについて
-
HTMLからフォルダを開きたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで#Regionに変わるものは無...
-
プログラム時のヘッダコメント...
-
レストラン、英語のメニュー表記
-
ソースの追加行数と変更行数
-
ソースの表示を無効にする方法。
-
「MicrosoftVisualBasic6.0 行...
-
Dreamweaverのコードカラーが黒...
-
VBAでhtmlソースから特定の文字...
-
実行オブジェクトからソースを...
-
画像と文字が重なって表示される。
-
ソースを表示させない方法はあ...
-
c言語の改修されたソースから改...
-
マウスポインタが手の形になら...
-
ListBoxの最大表示項目数について
-
IEでテキストの文字が一部だけ...
-
#ifdef多用でソースが見づらい
-
HTMLソースの文字コードがutfの...
-
JSPの実行結果をHTMLに変換
-
ASPの特殊記号について
-
ホームページビルダー HTMLの...
おすすめ情報