• ベストアンサー

PHPでセッション導入後に初めて見る文字化け

PHPの文字化けについて質問させてください。 約5年間程動かしているプログラムで、今まで全く文字化けしていなかったのが、突然文字化けが始まりました。セッション関数を入れてから、起こり始めたため、恐らく原因はセッションだと思います。 プログラムコードはSJISで記載し、日本語文字が文字化けしたりしなかったりと不定期に文字化けします。その形式も今まで私は見かけたことが無い形式で、SJIS特有の文字化けではないようで、例えばですが、 ^uoCLO5Zbg u[IuVfBA u[S[hXg[ J[lA sXY u[IuVfBA のように日本語が全て何かのコードのようになっています。 HTMLフォームに入力して渡してきた変数部分が文字化けしており、PHPに直接記載している日本語は文字化けしていないようです。 毎回文字化けはせず、突然文字化けします。 PHPのバージョンは4.3.9です。 以上情報が少ないかもしれませんが、もし何か原因や解決のヒントが分かりましたら、ご教授いただければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>^uoCLO5Zbg u[IuVfBA u[S[hXg[ J[lA sXY u[IuVfBA 見たことないタイプの化け方です。 なので余り下記の回答には自信がありませんが、一般的に「たまに文字化け」の原因となることが多いのは、PHPによる自動変換です。 mbstring.http_input = auto を、 mbstring.http_input = SJIS にすると解決しませんか? (もしくは、mbstring.encoding_translation = Off にするか)

noname#31558
質問者

お礼

アドバイスありがとうございました。 ご指摘の通り、自動変換での不定期な文字化けのようです。 mbstring.http_inputをautoに設定して様子をみたいと思います。

その他の回答 (1)

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.1

unicodeにエンコードされている様に思われます。 PHPをご使用の環境(サーバ)の設定で内部エンコーディングは具体的に何を設定されておりますか? php.ini定義ファイル,.htaccessファイル,実装コード いづれかで、内部エンコーディングの文字コードをShift_JISに定義してあげれば解決しそうな気がします。 (内部エンコーディングをShift_JIS指定で運用した経験が無い為に推測となります)

noname#31558
質問者

お礼

内部エンコードが原因だったようです。 mbstring.http_inputの部分を変更して様子を見たいと思います。 ありがとうございました。

noname#31558
質問者

補足

早速の回答ありがとうございます。 なるほどunicodeですか。 php.iniで日本語文字関係の設定を下記のようにしております。 mbstring.language = Japanese mbstring.internal_encoding = SJIS mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; もし何か分かりましたら、アドバイスいただければ幸いです。 よろしくお願いいたします。