中国在住の日本人の方から
charset=gb2312(中国語)で日本語のメールが来て
PHPの処理で文字化けが発生したので対応。
GB2312というコードで変換をしてみたけど一部の文字が化けてしまった。
GBKと指定すればOK。
//mb_convert_encoding($str, "UTF-8", "GB2312"); mb_convert_encoding($str, "UTF-8", "GBK");
手間取ったのが、メールの件名の文字化け。
mb_decode_mimeheader($headerList['Subject']);
の処理で既に文字化けが発生しているので
その後でmb_convert_encodingをしても直らない。
よく見ると、最初にGB2312でコンバートしていたのと同等の文字化けだった。
mb_decode_mimeheaderをかける前を見てみると、この時点でエンコード形式が指定されているよう。
=?GB2312?B?UmU6IM・・・
無理やりだけど、
$headerList['Subject'] = str_replace('GB2312', 'GBK', $headerList['Subject']);
としてエンコード形式の指定をGBKに置き換えたら直った。
コメントを残す