[Tep-j-general] PHP4.4.0 4.4.1 のメールヘッダーの文字化けについて

Back to archive index

Hajime Yamamoto yamam****@ytw*****
2005年 12月 2日 (金) 18:20:39 JST


山本と申します。

標記の件、Xoops のサイトで 暫定修正版 xoopsmailerlocal.php が
公開されています。

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

で、上記の暫定修正版を参考に osCommerce 用の関数を作って
みました。

以下のコードを catalog/includes/functions/general.php と
admin/includes/functions/general.php の最後に追加します。

//---- ここから -------
function tep_encode_mimeheader($str, $encode_charset,
$transfer_encoding, $linefeed) {
if (function_exists('mb_convert_encoding')) {
$str_encoding = mb_detect_encoding($str, 'EUC-JP,ASCII,'.$encode_charset );
if ($str_encoding == 'ASCII') {
return $str;
} else if ($str_encoding != $encode_charset) {
$str = mb_convert_encoding($str, $encode_charset, $str_encoding);
}
$cut_start = 0;
$encoded ='';
$cut_length = floor((67-strlen('=?'.$encode_charset.'?B?'.'?='))/4)*3;
while($cut_start < strlen($str)) {
$partstr = mb_strcut ( $str, $cut_start, $cut_length, $encode_charset);
$partstr_length = strlen($partstr);
if (!$partstr_length) break;
if ($encode_charset == 'ISO-2022-JP') {
if ((substr($partstr, 0, 3)===chr(27).'$B')
&& (substr($str, $cut_start, 3) !== chr(27).'$B')) {
$partstr_length -= 3;
}
if ((substr($partstr,-3)===chr(27).'(B')
&& (substr($str, $cut_start+$partstr_length-3, 3) !== chr(27).'(B')) {
$partstr_length -= 3;
}
}
if ($cut_start > 0) $encoded .= "\r\n\t";
$encoded .= '=?' . $encode_charset . '?B?' . base64_encode($partstr) . '?=';
$cut_start += $partstr_length;
}
} else {
$encoded = $str;
}
return $encoded;
}
//------ ここまで ---------------

それから、catalog/includes/classes/email.php と
admin/includes/classes/email.php の
md_encode_mimeheader を tep_encode_mimeheader に変更します。
変更箇所はそれぞれ3箇所です。

改行やタブは必要ありません。

-- 






Tep-j-general メーリングリストの案内
Back to archive index