[PHP-users 17310]Re: メールのデコードについて

hash8931 @ mail.goo.ne.jp hash8931 @ mail.goo.ne.jp
2003年 8月 14日 (木) 14:51:42 JST


高橋です

表題全体を一括してエンコードしてある場合は
たしかに寺尾さんのコードでも機能するかもしれませんが
ここは特にルールが標準化されていませんし、
複数部分に分けてエンコードされたメールも少なくないようです。
そこで、こんなふうにしてみてはいかがでしょうか。
文字列中にキーワードがあるあいだ、whileでループし
1個ずつ変換した文字列と置換してゆくというものです。

こんかいのような「Subject」に限らずとも、
文字列置換を繰り返し行いたい場合に応用できます。

while (eregi("(=??ISO?-2022?-JP??B??)([^??]*)(??=)",$subject,$hits)){
	$encoded_part = $hits[1].$hits[2].$hits[3];
	$decode_part = base64_decode($hits[2]);
	$subject = str_replace($replace_part,$decode_part,$subject);
}

#mailの日本語表題はもう一般的になってしまって
 これを無視することは出来ないようですね。



 --- mayo <pupil @ olive.freemail.ne.jp> からのメッセージ:
> 寺尾と申します。
> 
> ソケットオープンからメールを取得しようとしているのですが、
> 件名にマルチバイト文字があると
> ISO-2022****
> と言うエンコードがされています。
> 現在はそれを
> 
> if(ereg("Subject:",$check)){
>      sscanf($check,'Subject: %s?r?n',$subject);
>      if(eregi("(=??ISO-2022-JP??B??)(.*)(??=)",$subject,$subjects)){
>       $subject = base64_decode("$subjects[2]");
>       $subject = mb_convert_encoding($subject,"SJIS","JIS");
>      }
> }
> 
> と言う形で取得してうまく日本語を取得できたのですが、
> 件名の途中に全角スペースがあるとデコードが二つに分かれてしまいます。
> Subject: 
> このような形になっています。
> 全角スペースがあるごとに分かれてしまいますのでどのように取得すれば良いのか
> 思いつきません。
> 
> どなたかご教授お願い致します。
> 
> _______________________________________________
> PHP-users mailing list
> PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users


PHP-users メーリングリストの案内