現在.htaccessに下記設定を行っていますが
EUC-JPで書かれたPHPファイルをブラウザで表示した際に
本来SJISで出力されるはずのものが、EUC-JPで出力されてしまっており
どうしたものかと頭を悩ませております。
どうやらmbstring.http_outputが無視されているような感じを受けます
どなたか解決方法に心当たりのおられる方がいらっしゃいましたら
ご回答いただければと思います。
■サーバ環境
OS :CentOS 5.3
PHP :5.2.9
APACHE :2.2.12
■.httaccess
php_value mbstring.detect_order auto
php_value mbstring.language Japanese
php_flag mbstring.encoding_translation On
php_value mbstring.internal_encoding EUC-JP
php_value mbstring.http_input SJIS
php_value mbstring.http_output SJIS
※本設定は同ディレクトリ内にphpinfo()と書いたPHPファイルを用意→実行し、設定が反映されていることを確認しています。
※今回問題となっているEUC-JPでWEB出力されてしまうPHPファイルも同ディレクトリ内にあります。
header("Content-type: text/html; charset=shift_jis");
を記入されてテストしてみてはいかがでしょうか
URLはダミーです
状況から考えると、
HTTPヘッダーで
Content-type: text/html; charset=EUC-JP
を吐いているため
ブラウザ側で「EUC-JP」で認識されていると思いますので、
1ページだけであれば1の方の方法で対処できるかと思いますが、
全体に適用させたい場合は、
アクセスコントロールファイルに
php_value default_charset shift_jis
を追記してみてはいかがでしょうか。
そういう内容でしたか・・・、
リベンジです。
私の場合は、最初からmbstring.http_outputの内容を信用していないので、
EUC-JPで作成したものをSJISで出力する必要がある場合は、
HTMLタグの開始タグの前でApacheの出力バッファを取得するようにして、
HTMLタグの閉じタグ以降で
その出力バッファを変数に入れて、
文字コード変換をかけて出力してました。
以下がサンプルコードです。
※PHPタグ正常に表示されないので
全角で書いてます。
------------
<?php
ob_start();
?>
<html>
~省略~
</html>
<?php
header("Content-type: text/html; charset=shift_jis");
$contents = ob_get_clean();
mb_convert_variables("SJIS","EUC-JP",$contents);
$search_string = 'charset=euc-jp"';
$replace_string = 'charset=shift-jis"';
$contents = str_replace($search_string,$replace_string,$contents);
echo $contents;
?>
------------
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | GoldenDawn | 426回 | 399回 | 81回 | 2009-09-06 13:36:33 |
回答ありがとうございます。
質問時の内容が少しまずかったかもしれません。
HTTPヘッダはSJISとなっているようで、ブラウザには文字化けした日本語が表示されています。
この状態でブラウザのエンコード設定はSJISですが、これをEUC-JPに設定しなおすと
日本語が正常に表示される状態となっています。
(EUC-JPで書かれたコードがSJISに変換されることなく表示されている)