2010年10月21日木曜日

phpの何回かに数回起こるメールの文字化け

phpのメール送信で今までに遭遇した事のない文字化けの現象に対して

サーバーはPHP Version 4.1.2

ファイルをアップロードすると、強制的に改行コードをLF(UNIX)にされる仕様。

問題としては

フォームによるメール送信で100回中、何割かの確立で文字化けを起こしていた。


●問題を起こしていた状況

元々サイト自体をshift_jis(PCサイト)で制作されていたので、
限定的にutf8にてフォームを実装。
テストすると問題なし。
複数回テストをすると何割かに文字化けが発生する不安定な状況に。

mb_convert_encodingなどで文字コードを変換するも一向に直らない。

mb_detect_encodingで調べた結果、

そもそもhtmlからPOSTされている時点で文字コードがEUC-JPで渡されていることに気づく。

formタグに accept-charset="shift_jis"を書いても変わらず、なおもEUC-JPでポストされ続ける。
ブラウザからのPOSTはEUC-JPもしくはASCIIがデフォルトらしい。

結果的にPOSTする側とメール送信する側の文字コードをEUC-JPで統一し、
メール本文を以下の様にEUC-JPに変換して送信。
$body = mb_convert_encoding($body, "euc-jp","AUTO");


解決しました。
今回は文字コードを変更しても内容に影響のないサイトだったけど、
UTF-8でDBから情報引き出したりしてるサイトだったらと思うと冷や汗ものだった。

この問題ってサーバーによって生まれるのかな?
他のサーバでは問題のなかったソースコードでのトラブル。