- ベストアンサー
インクルードすると おかしい
インクルードすると"1"が表示されてしまい、困ってます。 コードがまずいのか?対処方法があるのか? すみませんが、教えてください。 状況は以下のとおりです。 test.php <?php echo include('./header.html'); ?> header.html <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> test.phpを実行すると、なぜか"1"が表示されてしまいます。 以上、よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
includeが成功したから1が返ってきているのではないでしょうか。 それをechoしているから1が表示されるんだと思います。
その他の回答 (4)
- izayoimizuki
- ベストアンサー率41% (84/202)
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> を header("Content-Type: text/html; charset=EUC-JP"); にしたほうが良い理由ですが・・・ header("Content-Type: text/html; charset=EUC-JP"); にしたほうが安全だからです。 なぜなら header("Content-Type: text/html; charset=EUC-JP"); はHTTPヘッダに値を出力してくれます。 なぜHTTPヘッダに値を出力すると安全になるかといいますとHTTP1.1ではContent-TypeやCharset等の表示に必要な情報が完全な形で必ず含まれていなければならないとされています。 (実際には最も無視されている規定に分類されるものですが) <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> はHTTPサーバが"任意に"解釈しヘッダを設定するための情報なのですね。 ところが殆どのHTTPサーバは任意に解釈"しない"でhttpd.conf等に設定されているものをセットします。 しかしIEのように寛容な解釈をするブラウザの場合は不正なContent TypeやCharsetがセットされても自ら送られてきたものを走査して適切に処理します。 しかしGeckoベースのブラウザ(Mozilla,Netscape,Firefox等)やKonquerorは文字化けようがどうであろうがヘッダに設定されたとおりに処理してしまいます。 もしhttpd.conf等でデフォルトの値としてContent-TypeがApplacation/octet-streameになっていれば指定していなければHTMLであってもファイルとしてダウンロードしますし 実際はEUC-JPのファイルなのにhttpd.conf等でShift_JISが指定されていればShift_JISで表示しようとして文字化けます。 そういった問題を回避するためにHTTPヘッダにheader関数でセットしておいたほうが安全というわけです。
- yambejp
- ベストアンサー率51% (3827/7415)
というか、PHPで文字コードを指定するのなら <?PHP header("Content-Type: text/html; charset=EUC-JP"); ?> の方が有効ですね。 あとはhtmlを呼び出すだけなのでechoをとればいいでしょう。 (includeするときに<?PHP ?>がなければ評価されずに そのままよまれるため)
お礼
#1から#4まで、まとめてお礼を申しあげます。 "1"はincludeの戻り値でした。 echoをなくし、readfileのみを用いることで、解決しました。 #4の方の回答ですが、もう少し、易しく説明いただけないでしょうか? コードを具体的に書いていただければ、理解しやすいかと思います。 (私の能力不足で、すみません。)
- tany180sx
- ベストアンサー率63% (239/379)
readfile('./header.html'); にするとか echo include('./header.php'); header.php return '<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">';
- activedolphin
- ベストアンサー率14% (9/61)
echoが必要ないのではないでしょうか? そのコードではinclude関数の戻り値(1か0)を表示してしまうのではないかと思います。
お礼
お礼が遅くなりましたが、ありがとうございました。 丁寧な説明でよく分かりました。