2009年2月16日

[SM-USERS-JA:1861] Re:受信メールの差出人名が文字化けする

川崎様のレスポンスに「ええっ!?」と思い私も端末立ち上げて確かめてみました。
---------------------------------------------------------------------
$ echo '=?iso-2022-jp?B?k4yNkYy0i/M=?=' | nkf -j >a.txt
$ hd a.txt
00000000 1b 24 42 45 6c 39 71 38 36 36 75 1b 28 42 0a
|.$BEl9q866u.(B.|
0000000f
$

$ echo '=?shift_jis?B?k4yNkYy0i/M=?=' | nkf -s >b.txt
$ hd b.txt
00000000 93 8c 8d 91 8c b4 8b f3 0a |.........|
00000009
$
$ echo '=?shift_jis?B?k4yNkYy0i/M=?=' | nkf
東国原空
$
$ echo '=?iso-2022-jp?B?k4yNkYy0i/M=?=' | nkf
東国原空
$
---------------------------------------------------------------------

nkf って頑張り過ぎだなぁと思いました。
手元にある1.4.15の環境を見たところ、該当箇所は

case 'decodeheader':
$ret = str_replace("\t", "", $ret);
if (eregi('=\\?([^?]+)\\?(q|b)\\?([^?]+)\\?=', $ret))
$ret = @mb_decode_mimeheader($ret);
$ret = @mb_convert_encoding($ret, 'EUC-JP', 'AUTO');
break;

になっていました。
うまくすれば、
case 'decodeheader':
if (eregi('=\\?([^?]+)\\?(q|b)\\?([^?]+)\\?=', $ret)) {
$ret = @mb_decode_mimeheader($ret);
$ret = @mb_convert_encoding($ret, 'EUC-JP', 'AUTO');
} elseif (strpos($ret, chr(27)) !== false) {

なんて置き換えで行けるかもしれませんね。

※'EUC-JP'は必要に応じて書き換えを。
 うまくいくかはちょっと自信ありませんが。

---
後藤秀樹( hgotoh@xxxxx )

_______________________________________________
squirrelmail-users mailing list
squirrelmail-users@xxxxx
http://sanguine.jp/mailman/listinfo/squirrelmail-users


投稿者 xml-rpc : 2009年2月16日 18:44
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/82288
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。