[PHP-dev 1188] Re: PHP4.4.1でmb_send_mailの第5引数が利かなくなってる

Tomoyuki Asakawa tom @ asakawa.ne.jp
2005年 11月 6日 (日) 14:06:38 JST


あさかわ

> 3番目は、本当にやるべきなのかも含めて少し面倒な話かもしれませ 
> ん。

この件の関連だと思うのですが。

http://xoopscube.jp/modules/xhnewbb/viewtopic.php?topic_id=758&forum=5

ここに。

 >$encoded = mb_convert_encoding((phpversion() == "4.4.0" ? "\n" :  
"").$str, _CHARSET, mb_detect_encoding($str));
 >として、4.4.0なら先頭に改行を入れて試たところ化けなくな 
りました。
 >なぜ化けなくなったのか、また他の問題が発生する可能性なども不明 
です。

という、なんか妙な解決方法がでていました。

最終的には

以下の関数を作成して対処してる模様です。

     function encode_header ($str, $position = 'text', $force=false) {
         $encode_charset = 'ISO-2022-JP';
         if (function_exists('mb_convert_encoding')) { //Use  
mb_string extension if exists.
             if ($this->needs_encode || $force) {
                 $str = mb_convert_encoding($str, $encode_charset,  
mb_detect_encoding($str));
                 $i = 0;
                 $encoded ='';
                 $cut_length = floor((76-strlen('Subject: =?'. 
$encode_charset.'?B?'.'?='))/4)*3;
                 while($i < strlen($str)) {
                 	$partstr = mb_strcut ( $str, $i, $cut_length,  
$encode_charset);
                 	if ($i) $encoded .= "\r\n ";
                 	$encoded .= '=?' . $encode_charset . '?B?' .  
base64_encode($partstr) . '?=';
                 	$i += strlen($partstr);
                 }
             } else {
                 $encoded = $str;
             }
         } else {
             $encoded = parent::encode_header($str, $position);
         }
         return $encoded;
     }





PHP-dev メーリングリストの案内