[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 メーリングリストの案内