phpファイルの、ブラウザ出力時の文字コードに関する質問です。


phpファイルをブラウザでみたとき、文字化けを起こしてしまい困っています。
htmlファイル(hoge.html)とphpファイル(hoge1.php)あり、どちらもEUC-JPで保存してあります。
htmlファイルの場合、<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> を書き加えることで、ブラウザから正常にみることができます。
しかし、phpファイルの場合、<meta http-equiv="Content-Type" content="text/html;charset=EUC-JP">を書き加えても、shift-jisとして出力されてしまい、文字化けした状態となってしまいます(hoge1.php)。
また、HTMLヘッダを使っても同様に、shift-jisとして出力されてします(hoge2.php)。

httpd.confやphp1.iniの設定が上手くいっていないのでしょうか。
ご回答よろしくお願いします。

以下に、環境とphpファイルを示します。
OSはVineLinux3.2。PHPはバージョン5.2がインストールされています。

hoge1.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
</head>
<body>
<?php
echo "こんにちは";
?>
</body>
</html>

hoge2.php
<?php
header('content-type:text/html; charset=EUC-JP');
header('Content-Language: ja');
echo "こんにちは";
echo phpinfo();
?>

回答の条件
  • URL必須
  • 1人50回まで
  • 登録:
  • 終了:2009/09/17 21:00:34
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:sirotugu40 No.1

回答回数449ベストアンサー獲得回数14

ポイント20pt

httpd.confを書き換えないと駄目ですね。

http://www.onlineconsultant.jp/pukiwiki/index.php?httpd.conf%20%...

id:kokuban-kumasan

ご回答ありがとうございます。

ご指摘頂いた、httpd.conf内の設定について確認し、

AddCharset EUC-JP .euc-jp

AddLanguage ja .ja

LanguagePriority ja en da nl et fr de el it kr no pl pt pt-br ltz ca es sv tw

AddDefaultCarset off

と設定を行ない、apacheの再起動を行ないましたが、

またshift-jisで出力されてしまいました。

2009/09/17 15:29:21
id:chrono1742 No.2

回答回数91ベストアンサー獲得回数13

ポイント20pt

HTMLの<head>タグと、PHPのheader関数は別物です。

hoge2.phpは下記のように書き、EUC-JPで保存する必要があります。

echo "<html>\n";
echo "<head>\n";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\"> \n";
echo "</head>\n";
echo "<body>\n";
echo "こんにちは";
echo "</body>\n";
echo "</html>\n";

http://www.php.net/manual/ja/function.header.php

id:kokuban-kumasan

ご回答ありがとうございます。

頂きましたphpコードをEUC-JPで保存し、

ブラウザからみてみましたが、

やはりShift-jisで出力されてしまいました。

ブラウザのエンコーディングをEUCにすると文字化けすることなく表示されますので、EUCでの保存は正しく行われていると思います。

2009/09/17 15:39:58
id:jirepo No.3

回答回数30ベストアンサー獲得回数6

ポイント50pt

http://www.yahoo.co.jp

urlはダミーです

<?php の直後に

mb_language("ja");

mb_internal_encoding('EUC-JP');

を入れてみてください。

ただし、webサーバーにphp-mbstringが入っている必要があります。

id:kokuban-kumasan

ご回答ありがとうございます。

ご指摘をヒントに、解決することができました。

問題は、mbstring.http_outputとmbstring.internal_encoding の設定が、

SJISになっていたことでした。

設定は行ったと思っていましたが、サーバが使用している設定ファイルが、

/etc/php.iniではなく、/etc/php5/php.iniだったために、設定がSJISのままになっていた様です。

ご回答して頂いた皆様、ありがとうございました。

2009/09/17 20:58:07
  • id:standard_one
    とりあえずhttpd.confのAddDefaultCharsetがどうなってるかを晒してもらえませんか?
  • id:kokuban-kumasan
    AddDefaultCharsetは、offに設定されています。
  • id:bayan
    mbstring の機能で出力文字コードの変換をしているとか?

    phpinfo() の出力で、以下の設定項目の Local Value 、Master Value は
    どうなっていますか?

    mbstring.http_output
    mbstring.internal_encoding
  • id:kokuban-kumasan
    ありがとうございます。
    まさにご指摘された通りでした。
    設定ファイルを間違えて、設定が反映されていませんでした。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません