[Tep-j-develop] Re: mb_encode_mimeheader() default encoding

Back to archive index

TANABE Junnichi junni****@lumin*****
2003年 3月 5日 (水) 06:54:04 JST


田邉です。

田村さん色々御迷惑をかけてすいません。

At Tue, 04 Mar 2003 10:42:39 +0900,
TAMURA Toshihiko wrote:
> > mb_encode_mimeheader(mb_convert_encoding($to_name,'JIS','EUC')) . '"<' . $to_addr . '>'
> > 
> > から、
> > 
> > mb_encode_mimeheader($to_name, 'ISO-2022-JP') . '" <' . $to_addr . '>'
> > 
> > へ変えました。($from_name, $subjectなども)
> 
> えーと、mb_convert_encoding($to_name,'JIS','EUC') の部分は
> 必要ないんでしょうか?
> mb_encode_mimeheader 自体は、文字コードの変換はしてくれないと
> 思っていたんですが。
>
以下のようなつまらないスクリプトを書いてテストしてみましたが、全角18
文字くらいまでの短い物については問題無さそうに見えます。

$ cat mb_encode_mimeheader.php
<html>
  <body>
<?php

if (extension_loaded('mbstring')) {
    mb_internal_encoding('EUC-JP');
    mb_http_output('EUC-JP');
};

print "元の日本語<br>\n";
$str = '少し長めの日本語をここに書いてね';
print '$str: ' . $str . "<br>\n<br>\n";

print "MIME encoded str in three methods<br>\n";
$a = mb_encode_mimeheader($str, 'ISO-2022-JP');
$b = mb_encode_mimeheader(mb_convert_encoding($str, 'JIS', 'EUC'), 'ISO-2022-JP');
$c = '=?ISO-2022-JP?B?' . base64_encode(mb_convert_encoding($str, 'JIS', 'EUC')) . '?=';
print 'encoded($a): ' . $a . "<br>\n";
print 'encoded($b): ' . $b . "<br>\n";
print 'encoded($c): ' . $c . "<br>\n<br>\n";

print "the method decoded by mb_decode_mimeheader()<br>\n"; 
print '$a: ' . mb_decode_mimeheader($a) . "<br>\n";
print '$b: ' . mb_decode_mimeheader($b) . "<br>\n";
print '$c: ' . mb_decode_mimeheader($c) . "<br>\n<br>\n";

print "the method decoded by base64_decode()<br>\n";
$d = split('\?', $a);
$e = split('\?', $b);
$f = split('\?', $c);
print 'encoded($d[3]): ' . $d[3] . "<br>\n";
print 'encoded($e[3]): ' . $e[3] . "<br>\n";
print 'encoded($f[3]): ' . $f[3] . "<br>\n<br>\n";
print '$d[3]: ' . base64_decode($d[3]) . "<br>\n";
print '$e[3]: ' . base64_decode($e[3]) . "<br>\n";
print '$f[3]: ' . base64_decode($f[3]) . "<br><br>\n";

print "convert to EUC<br>\n";
print '$d[3]: ' . mb_convert_encoding(base64_decode($d[3]), 'EUC', 'JIS') . "<br>\n";
print '$e[3]: ' . mb_convert_encoding(base64_decode($e[3]), 'EUC', 'JIS') . "<br>\n";
print '$f[3]: ' . mb_convert_encoding(base64_decode($f[3]), 'EUC', 'JIS') . "<br>\n";

?>
  </body>
</html>

> それから、subject については、確か subject の文字列が長い場合に
> mb_encode_mimeheader を通すと末尾が切れてしまうので、
> 以前は mb_encode_mimeheader を使わないで処理していたんですよ。
> # スマートな方法が思いつかなかったもので。
> 
上記スクリプトでもそうでしたが、長いとおかしくなってしまうようですね。
From:, To: についても同じように思えますが、どうなんでしょうか?

長いと、mb_encode_mimeheader() を通した時に、途中でブツ切りされたよう
な状態になってしまうようです。ちゃんとくっつけてやれば良さそうな感じも
するのですけど、$bの例では mb_decode_mimeheader() を通すと途中から化け
てしまいます。

以上宜しくお願い致します。

-- 
ルーミナス-----------------------------+
 | 田邉純一 (TANABE Junnichi)          |
 | E-mail : junni****@lumin***** |
 +-------------------------------------+



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