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();
?>
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";
ご回答ありがとうございます。
頂きましたphpコードをEUC-JPで保存し、
ブラウザからみてみましたが、
やはりShift-jisで出力されてしまいました。
ブラウザのエンコーディングをEUCにすると文字化けすることなく表示されますので、EUCでの保存は正しく行われていると思います。
urlはダミーです
<?php の直後に
mb_language("ja");
mb_internal_encoding('EUC-JP');
を入れてみてください。
ただし、webサーバーにphp-mbstringが入っている必要があります。
ご回答ありがとうございます。
ご指摘をヒントに、解決することができました。
問題は、mbstring.http_outputとmbstring.internal_encoding の設定が、
SJISになっていたことでした。
設定は行ったと思っていましたが、サーバが使用している設定ファイルが、
/etc/php.iniではなく、/etc/php5/php.iniだったために、設定がSJISのままになっていた様です。
ご回答して頂いた皆様、ありがとうございました。
ご回答ありがとうございます。
ご指摘頂いた、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で出力されてしまいました。