• ベストアンサー

インクルードすると おかしい

インクルードすると"1"が表示されてしまい、困ってます。 コードがまずいのか?対処方法があるのか? すみませんが、教えてください。 状況は以下のとおりです。 test.php <?php echo include('./header.html'); ?> header.html <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> test.phpを実行すると、なぜか"1"が表示されてしまいます。 以上、よろしくお願いいたします。

  • PHP
  • 回答数5
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

includeが成功したから1が返ってきているのではないでしょうか。 それをechoしているから1が表示されるんだと思います。

その他の回答 (4)

回答No.5

<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関数でセットしておいたほうが安全というわけです。

xyz_1990
質問者

お礼

お礼が遅くなりましたが、ありがとうございました。 丁寧な説明でよく分かりました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

というか、PHPで文字コードを指定するのなら <?PHP header("Content-Type: text/html; charset=EUC-JP"); ?> の方が有効ですね。 あとはhtmlを呼び出すだけなのでechoをとればいいでしょう。 (includeするときに<?PHP ?>がなければ評価されずに そのままよまれるため)

xyz_1990
質問者

お礼

#1から#4まで、まとめてお礼を申しあげます。 "1"はincludeの戻り値でした。 echoをなくし、readfileのみを用いることで、解決しました。 #4の方の回答ですが、もう少し、易しく説明いただけないでしょうか? コードを具体的に書いていただければ、理解しやすいかと思います。 (私の能力不足で、すみません。)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

readfile('./header.html'); にするとか echo include('./header.php'); header.php return '<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">';

回答No.2

echoが必要ないのではないでしょうか? そのコードではinclude関数の戻り値(1か0)を表示してしまうのではないかと思います。

関連するQ&A

  • HEADERについて

    無知でお恥ずかしいのですが、PHPで出力する際 header("Content-Type: text/html;charset=EUC-JP"); などと最初にヘッダーを出力すると思うのですが、例えばtest.phpが以下のようになっていた場合でもPHPでヘッダーを出力する必要があるのでしょうか? test.php ※1<?php header("Content-Type: text/html;charset=EUC-JP"); ?> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> <TITLE></TITLE></HEAD> <BODY> TEST <?php echo $test; ?> </BODY> </HTML> 参考書などを見てみると「全ての出力の前に記述する必要がある」と書いてあるだけで、書かずとも正常に表示されますし、仮に文字化けしても <META HTTP-EQUIV="Content-Type" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> と追加すれば文字化けも解決するので、疑問は感じつつも思い出したときにPHPにもヘッダを記述するようにしていたのですが、少しづつPHPを勉強しやれる事が増えてくる内に、記述してあるものと記述して無いものが混在してきて気持ち悪く感じてきました。 皆さんはどのようにされていますか? ※他サイトで配布されているPHPスクリプトなども見てみたのですが、毎回記述している方、一切記述していない方それぞれでした。 あと、全く違う質問ですが、MYSQL接続中にエラー処理でexit;する場合、exit;する前にMYSQL接続を切断する必要ってあるのでしょうか?

    • ベストアンサー
    • PHP
  • 更新を繰り返すと文字化けが起きてしまいます...

    お世話になります PHP4でHPを作成しています 文字化けに関して質問させて下さい PHPで作成したページの更新をすると 5回に1回の割合で文字化けが発生してしまいます EUC-JPで作成したPHPファイルを表示するので ファイルの先頭に  <? header(\"Content-Type: text/html;charset=EUC-JP\"); ?>  <html lang=\"ja\">  <head>  <meta http-equiv=\"content-type\" content=\"text/html; charset=EUC-JP\">  <meta http-equiv=\"content-style-type\" content=\"text/css\">  <meta http-equiv=\"content-script-type\" content=\"text/javascript\"> と指定してから 他の処理が実行されるようにしているのですが…。 何回か更新を繰り返すと文字化けを起こしてしまいます。 文字化けを起こした時にソースを表示すると 日本語が正しく見れる状態になっていたので シフトJISになってしまっているようで… 宜しくお願いします

    • 締切済み
    • PHP
  • phpのincludeで表示を変化させたい

    includeでHTMLの表示を変えられるように したいのですが、どうもうまくいきません。 (ブラウザ表示が真っ白になる。) 以下のようなソースを書いてみました。(php4.3.11,apache) (1) test01.php <?php $param = $_GET['param']; include ("./includes/datapack01.php"); ?> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=EUC-JP"> <TITLE>COMPANY A - <?php echo $title; ?></TITLE> </HEAD> <BODY> <span> test </span> </BODY> </HTML> (2) datapack01.php <? if($param == "8") { $title = "お問い合わせ : オーダー申し込み"; } ?> 意図としては、http://hoge.com/test01.php?param=8 とアクセスすれば、ブラウザのタイトル欄に 「COMPANY A お問い合わせ : オーダー申し込み」 と表示させたいところですが、 実際は、ブラウザ表示は真っ白となってしまいます。 http://hoge.com/test01.php とすれば、「test」とのみ表示されるのですが・・・

    • ベストアンサー
    • PHP
  • header関数について

    私の認識としてはheader関数とはhtml内にある<head>内の代替わりだと思っていたのですが、それではheader関数の意義がないと思い、質問させていただきました。 php内でhtmlを書く場合、header関数を使わずに、<head>内で <meta http-equiv=\"Content-Type\" content=\"text/html\; charset=euc-jp\">\n"; のように書けばいいと思うのですが、なぜ header("Content-Type: text/html; charset=EUC-JP"); のように書く必要があるのでしょう?何かメリットでもあるのでしょうか? それとも私のheader関数に対する認識がずれていますか? php初心者というより、プログラム事態をあまり書いたことがないため、理解が乏しいです。header関数とhtml内での<head>間に書く違いを教えてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • ジオシティーズで作るのならeuc-jp?

    yahooジオシティーズでHPを作る際は、絶対に <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=euc-jp"> ってやらないとうまくひょうじできないのでしょうか? <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=euc-jp"> をしないでIEで表示しようとすると文字化けしてしまいます。

    • ベストアンサー
    • HTML
  • POSTされた値をEUCで表示したい

    <?php echo '<html><head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> </head> <body> <form action="test2.php" method="POST"> <input name="str1" value="テストです"> <input type="submit"> </form> </body></html>'; exit; } ?> こうして送信されたデータは <?php echo '<html><head> <meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS"> </head><body>'; echo $_POST['str1']; ・・・・・ として表示しますが、このままのテストソースではSJISで普通に表示されますが、EUCで表示するにはWindowsの中のphp.iniを編集すればよいと思います。 どのようにすればよいですか? test2.phpが・ニ・ケ・ネ、ヌ、ケと表示したら成功です。

    • 締切済み
    • PHP
  • 携帯用HPの文字化け。。

    携帯用のウェブサイトを作成しています。 手持ちのi-mode/FOMAでプレビューすると正常に表示されるのですが EZ-webでプレビュー(openwave sdk 6.2K使用)すると、全体的に文字化けしてしまいます。 文字コードが関係している事が分かり、HTML内のメタ情報をEUC-JPからShift_JISへ書き直しました。 すると何故か今度はFOMAで文字化けし、EZ-webで正常表示という結果になり、四苦八苦しております(;´Д`) 修正前は以下の通りです。 <?php declare(encoding="EUC-JP"); header('Content-Type: text/html; charset= EUC-JP'); session_start(); $sid = session_id(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <META http-equiv="Content-Type" content="text/html; charset=EUC-JP">   ・   ・   ・ テスト時に修正したのは、<META~~ charset=EUC-JP">のEUC-JP部分です。 PHPには内部処理のみをさせているので、修正を加えませんでした。 ( header('Content-Type: text/html; charset= EUC-JP'); の部分です) i-modeとez-webの両方で文字化けさせない為には、どの様な修正をすれば良いのでしょうか。 ご存知の方、お教え下さい。どうぞ宜しくお願いします。m(__)m

    • ベストアンサー
    • HTML
  • HTML・PHPの文字化け

    こんにちは。 PHPとMySQLを使ってショッピングカートを作ろうと思ったのですが、しょっぱなから躓いてしまいました・・・。 index.htmlでメタを <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> とeuc-jpにしたのですが、サーバーにアップすると文字化けしてしまいます。 表示のエンコードで確認するとシフトーJisになっています。eucにするとちゃんと表示されるのですが、更新するとやはり文字化けします。PHP・MySQLがeucですので、困っています。 どうにか対処方法はないでしょうか?ご教授をよろしくお願いします。

    • ベストアンサー
    • HTML
  • フォームの文字コードについて

    phpについて質問なんですが、<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">となっているページのフォームの内容の文字コードをphp側で確認すると、文字コードが「EUC-JP」となっています。 これはこういうものなのでしょうか? ご教授よろしくお願いします。

    • 締切済み
    • PHP
  • 「塙」と言う文字が文字化けしてしまう

    表題の件で質問させて下さい。 PHPで文字コードをEUCにしたwebアプリケーションを構築しております。 特に何の問題もなく動いていたと思っていたのですが、フォーム等で「塙」と言う文字を入力して、submitした値を表示させると文字化けしてしまいます。 これを表示させるには、どのような対処を行えば良いのでしょうか? いろいろと試してみた結果、 「塙あ」のように、後ろに全角文字が入るとキチンと文字化けせずに表示されるのは確認しました。 (「塙1」のように後ろに半角文字があると「?1」になってしまいます) どなたか対策をご存知の方、いらっしゃいましたらご教授お願いします。 下記の対策は行っています。 ・header("Content-type: text/html; charset=EUC-JP"); ・<meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> ・ファイルをEUC-JPで保存

    • ベストアンサー
    • PHP

専門家に質問してみよう