charset=gb2312のメールをPHPで処理

中国在住の日本人の方から
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に置き換えたら直った。


Categories:

Tags:


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA