[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 メーリングリストの案内