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

Back to archive index

Mineaki Gotoh gij****@peak*****
2003年 3月 5日 (水) 14:26:16 JST


田邊さん、こんにちは。素早いレスありがとうざいます。

> > 環境による影響はどうやっても消せないので、一般的なphp.iniについては設
> > 定しておいた方が良いと思っています。
> >
> これはおっしゃる通りですね。私も通常の開発時には .htaccess 等に色々書
> く口です。ただ、php.ini, .htaccessに日本語特有の事項をあれこれ書いた時
> に、他の言語に影響が出ないかどうか少し心配ではあります。(私自信は日本
> 語しか使わないので困らないのですが、、、。@焦)

mbstring系の定数については、日本語以外の「マルチバイト言語」を使わな
ければ問題ないと思います。

中国語やハングル語と日本語の両方で表示されるショップを目指す、という
ことを目指すと大変ですね。


それと、このツリーのそもそもの主旨についてですが、

> 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なども)

については、結果的にこれがベストだと思います。


私も田邊さんのテストコードにおける$bの結果には驚いたクチですが、
mb_encode_mimeheader()に、EUCのままの文字列を渡すと、2バイト文字の境
界をうまく検知して、foldingの直前で調節してくれるのですが、JISにして
から渡してしまうとなぜかこれに失敗してしまい、RFC2047の解釈次第、とい
う困った文字列を生成してしまうようです。

しかも、後者はmb_decode_mimeheader()自身がデコードに失敗します……。
となれば、MUAで失敗するものもゾクゾクと出てくるというわけです。(今考
えると恐ろしい)


というわけで、結局は田邊さんのコードが良かろう、ということです。CGI版
での簡易テストではありますが、4.0.6および4.2.2でも、確かに適切な
foldingのなされたMIMEヘッダフィールドを生成することを確認しています。

結果的によけいなチャチャ入れになってしまい、申し訳ありません。


ただ、これとは別の問題があって、少なくとも以前のバージョンでは、
$to_nameが指定されず、$to_addrにいきなり

"name" <foo****@bar*****>

が渡されるケースがありました。このあたりの対策も出来ればしておきたい
ところだと思います。

-- 
株式会社PEAK  ネットワーク技術担当 後藤 <gij****@peak*****>





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