geeklogハックその2

COM_mailという関数があり、これでメールを出そうとする場合、ヘッダの日本語が文字化け(UTF-8BASE64)してしまう。COM_mailはprivate/system/custom/custom_mail.phpのCUSTOM_mailからメールを出すようで、ここでの変換に問題があるようだ。
PHPマニュアルによると、

string mb_encode_mimeheader ( string str [, string charset [, string transfer_encoding [, string linefeed]]] )

mb_encode_mimeheader() は、MIME ヘッダ エンコーディング方式によって文字列 str をエンコードします。この関数は、ASCII 表現の文字列を返します。

charset は、str の文字セット名です。デフォルトは、現在の NLS 設定 (mbstring.language)によって決まります。

ということ。ただし、こちらの環境では、mbstring.languageは”"japanese"と指定しているんで、結局internal_encodingの値が採用されているような気がする。

てなわけで、private/system/custom/custom_mail.phpを以下のように変更。

--- custom_mail.php.org 2006-09-05 16:08:24.000000000 +0900
+++ custom_mail.php     2006-10-17 17:57:11.000000000 +0900
@@ -57,7 +57,7 @@
             mb_detect_encoding($name,"EUC-JP,UTF-8,JIS,SJIS"));
         //@@@@@2006005 元に戻す, 20051111 update ----->
         //$name = "=?iso-2022-jp?B?" . base64_encode($name) . "?=";
-        $name = mb_encode_mimeheader($name);
+        $name = mb_encode_mimeheader($name, 'ISO-2022-JP');
         //@@@@@2006005, 20051111 update <-----
         $from=$name." ".$address;
     //@@@@ 2006/05/12 mystral_kk added -->
@@ -75,7 +75,7 @@
                 mb_detect_encoding($name,"EUC-JP,UTF-8,JIS,SJIS"));
         //@@@@@20060905 元に戻す 20051111 update ----->
         //$name = "=?iso-2022-jp?B?" . base64_encode($name) . "?=";
-        $name = mb_encode_mimeheader($name);
+        $name = mb_encode_mimeheader($name, 'ISO-2022-JP');
         //@@@@@20060905 元に戻す 20051111 update <-----
         $to=$name." ".$address;
     }
@@ -85,7 +85,7 @@
                mb_detect_encoding($subject,"EUC-JP,UTF-8,JIS,SJIS"));
     //@@@@@20060905 元に戻す 20051111 update ----->
     //$subject = "=?iso-2022-jp?B?" . base64_encode($subject) . "?="."\r\n";
-    $subject = mb_encode_mimeheader($subject);
+    $subject = mb_encode_mimeheader($subject, 'ISO-2022-JP');
     //@@@@@20060905 元に戻す 20051111 update <-----
     $message = mb_convert_encoding($message, "JIS",
                mb_detect_encoding($message,"EUC-JP,UTF-8,JIS,SJIS"));

それにしてもこのファイル、なんでShift_JISなんだろ?