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

Back to archive index

TANABE Junnichi junni****@lumin*****
2003年 3月 5日 (水) 09:42:12 JST


田邉です。

後藤さん色々ありがとうございます。非常に勉強になります。:-<

At Wed, 05 Mar 2003 09:18:50 +0900,
Mineaki Gotoh wrote:
> 
> 田邊さん、こんにちは。後藤です。朝早くからお疲れさまです。
>
いえ、これから寝るのです、、、。(駄目人間)

> ただ、php.ini がなければ、すべてのphpが同じオプションで動作するか、と
> いうとちょっと違って、configure時のオプション次第でphp.iniなし時のデ
> フォルト設定が決まるものもあります。
> 
> 環境による影響はどうやっても消せないので、一般的なphp.iniについては設
> 定しておいた方が良いと思っています。
>
これはおっしゃる通りですね。私も通常の開発時には .htaccess 等に色々書
く口です。ただ、php.ini, .htaccessに日本語特有の事項をあれこれ書いた時
に、他の言語に影響が出ないかどうか少し心配ではあります。(私自信は日本
語しか使わないので困らないのですが、、、。@焦)
> 
> >勿論、
> >> mbstring.language = Japanese
> >を php.ini に書け、とマニュアルに書いておけば良い事なのかもしれないで
> >すが。
> 
> これに関しては、osCommerceのマニュアルというより、phpのマニュアルに書
> いておいて欲しいところですね。4.3.0 に上げて、この部分でハマった人は
> 数多いと思います。(私もそうです)
>
御意。:-)

> > 上記スクリプトでもそうでしたが、長いとおかしくなってしまうようですね。
> > From:, To: についても同じように思えますが、どうなんでしょうか?
> > 
> > 長いと、mb_encode_mimeheader() を通した時に、途中でブツ切りされたよう
> > な状態になってしまうようです。ちゃんとくっつけてやれば良さそうな感じも
> > するのですけど、$bの例では mb_decode_mimeheader() を通すと途中から化け
> > てしまいます。
> 
> mb_encode_mimeheader() は、ヘッダフィールド用のエンコードに変換する関
> 数です。
> 
> ですから、RFCの規定にあるfoldingを行います。75文字程度を基準としてい
> るようです。
>
おおぉ、かなり目から鱗です。

> もちろん、RFC822に準拠したMUAであれば、unfolding処理もきちんと行いま
> すので、Subject:やFrom:,To:が長くて、途中に"\r\n "が入ったものでもき
> ちんと処理してくれます。事実、うちのショップでは、私の書いたコードを
> そのまま使っていますが、長いSubjectでも文字化けしたことは一度もありま
> せん。(12/08修正分については、むしろそれこそがRFC違反なので、採用して
> いません)
> 
> 途中でブツ切りになったわけではなく、むしろ親切でそうしてくれていると
> 解釈しています。(RFCを読むまでは、私もこの仕様に ??? でしたが)
>
お恥ずかしながらRFC822読んだ事無かったので、探してみました。
http://www.asahi-net.or.jp/~bd9y-ktu/dtd_f/rfc_f/rfc822j.html
辺りでしょうか。
> 
> 田邊さんの、mb_encode_mimeheader.php においても、base64_decodeする前
> に、MIMEヘッダ処理の義務である、unfoldingを行えば、ちゃんと元の文字列
> になるはずですよ。(もちろん、あのコードでは単純にそうなるわけではあ
> りませんが)
>
複数行になってしまっているのはやっぱりくっつけてやれば良いわけですね。
> 
> ただ、RFC822を読む限り、folding自体はmustではないようですから、
> 
> '=?ISO-2022-JP?B?' . base64_encode(mb_convert_encoding($str, 'JIS', 'EUC')) . '?='
> 
> という単純な処理でも良いかもしれませんね。
> 
> もっとも、別のRFCにMIMEヘッダの上限が255byte、みたいな規定があっても
> おかしくはないですし、長すぎるヘッダを変な位置で勝手にfoldingするMTA
> や、ヘッダ処理のためのバッファを256byte分しか取っていないMUAがないと
> いう保証はないですね。だから、私が書くならやはりmb_encode_mimeheader
> を使うと思います。
> 
もうちょっと勉強する事にします。
# 金曜移行しか作業できないですが。:-)

以上宜しくお願い致します。
-- 
ルーミナス-----------------------------+
 | 田邉純一 (TANABE Junnichi)          |
 | E-mail : junni****@lumin***** |
 +-------------------------------------+



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