[PHP-users 32953] PHP4.4.2で不確定な文字化け

Atsushi NAGAI nagai @ asahi-pj.co.jp
2007年 12月 3日 (月) 17:23:01 JST


永井と申します。こんにちは。

現在、Apache+PHP+MySQLで構築したサイトを某レンタルサーバへ
移して試用しているのですが、不確定な文字化けに悩んでいます。

# 以下、長くなりますが、少し冗長に記述します。

・全く同じレスポンスを返すリクエストで、文字化けする場合と
 しない場合がある。
 文字化けした場合も、再度同じリクエストを投げると化けない。
 # フォームから条件指定して検索結果を表示するような画面で、
 # 条件を変更しながら検索していると、突然化ける。
 # 同じ条件で再度検索すると化けない。
 # 一度正しく表示されると、その直後は化けることはなくなる。
 # 翌日試すと、前日は化けなかった条件で化ける。
 # 一方、前日は化けた条件では化けない。
 # ・・・といった有様で、化ける条件が特定できません。

・化ける頻度は低めで、30回程度色々なリクエストを投げて、
 ようやく1回化ける程度。
 それが1回目にあたることもあれば、30回目のこともある。
 長時間経過後のアクセスの場合に比較的頻度が高くなる。
 # 前述の通り、一度正しく表示されると化けないようなので、
 # 色々なリクエストを試していると、ほとんど化けなく
 # なります。

・文字化けは、ブラウザの文字コード判別が違うのではなく、
 サーバが返すレスポンス自体が化けている。

・文字化けするのは、PHPソース(実際にはSmartyテンプレート)に
 記述している日本語のみ。MySQLから取得してテンプレートに
 埋め込んでいる日本語は化けない。

・MySQL操作用に phpMyAdmin 2.11.2.2 も入れているが、
 同様の現象が発生する。
 (同じリクエストで化けたり化けなかったり)

前のサーバ環境(問題なく動作)との違いは、

・PHP が 4.4.2 であること(前環境は 4.3.11)。
・Safeモード on であること(前環境は off)。
・MMCacheが組み込まれていること(前環境は なし)。
・mbstring.http_output=auto であること(前環境は EUC-JP)。
 (元々、スクリプトでEUC-JPにini_set()しています)

といったところですが、どういった原因が考えられるでしょうか?

php.iniの変更も .htaccessによるphp設定もできない環境ですので、
スクリプトで何とかできなければ、あきらめるしかないのですが、
条件面など気に入っているサーバなので、何とかしたいところです。

情報をお持ちの方、よろしくお願いします。


以下に、関係しそうな情報を示します。
なお、ソースは、Smartyテンプレートも含めて全て EUC に統一
しています。

[関係ソフトのバージョン]
PHP 4.4.2(Linux)
Apache2
MySQL 4.0.22

[phpinfo() の内容]
default_charset no value
output_buffering no value
output_handler no value
safe_mode On
mbstring.detect_order auto
mbstring.encoding_translation On
mbstring.func_overload 0
mbstring.http_input auto
mbstring.http_output auto
mbstring.internal_encoding EUC-JP
mbstring.language Japanese
mbstring.script_encoding no value
mbstring.substitute_character no value
# あと、Turck MMCache が組み込まれています。
# それと --enable-zend-multibyte 付きビルドです。

[script での設定]
ini_set("default_charset", "EUC-JP");
ini_set("mbstring.script_encoding", "EUC-JP");
ini_set("mbstring.http_output", "EUC-JP");
ob_start("mb_output_handler");
# mbstring.http_output を pass にして、ob_start() をやめても
# 現象は変わりませんでした。

-- 
Atsushi NAGAI <nagai @ asahi-pj.co.jp>



PHP-users メーリングリストの案内