[PHP-dev 904]Re: mbstringのBUGではないでしょうか?
T.P.S.Nakagawa
yaemon @ alles.or.jp
2003年 10月 6日 (月) 05:14:41 JST
パイプ喫いの中川です。
鹿持@メダカレさんが
10月06日03時52分に発信された
「[PHP-dev 903] Re: mbstringのBUGではないでしょうか?」こと
<m3ad8f7c0j.wl @ localhost.localdomain.wineroses.org>より
> > > もし、既に判明している情報であれば、回避方法などを
> > > 教えていただければ幸甚です。
> > なぜ回避しないといけないのでしょうか。
<>
> 元発言の方は文字化けの回避をしたいとおっしゃっているので、
Oh!
> 当初、mb_send_mailで文字化けを起こすので、いろいろと
> 切り分けていくと、mb_languageでjapaneseを指定したときに
> 改行文字(?)が含まれることに気が付きました。
> サンプルコードを後述します。
肝心の部分を読み落していたようです。
失礼しました。
> > PHP のメール関数は、メールのお作法に従って適切な長さで
> > 改行を入れているのだと思います。
>
> メールの本文には適宜改行を入れろ、という中川さんの意見には同意なんですが、
> 元発言の方は文字化けの回避をしたいとおっしゃっているので、
> マルチバイトな文字中に改行が入って文字化けが起きている、
> という主張なんじゃないでしょうか?
メールの送信コードは ISO-2022-JP だから、改行の前には
Esc ( B を 、改行のあとには Esc $ B を入れてやらないと
マルチバイトな文字の、文字と文字の間部分で改行が入った
としても化けることになりますね。
(全部日本語の場合。ASCII が交じると、もう知らん)
> > と、いうことで BUG ではなく仕様、-users 行きの話題かと。
>
> 改行を入れているのって mb_send_mail の部分ではなくて、
> もともとの mail 関数の方なんでしょうかね。
> そうすると改行が入る仕様自体はいいですが、マルチバイトなときは
> 注意してね、な注意書きがほしいと言えばほしいのかも。
http://jp2.php.net/manual/ja/ref.mail.php の下のほうに
> /* Lines longer than 76 characters (size limit for quoted-printable
> Content-Transfer-Encoding) will be cut after character 75 and
> an equals sign is appended to these lines. */
>
て書いてあるから、これのことじゃないのかな。
(2003年1月31日)
解決策 1. mb_send_mail() で、さきに エスケープシーケンス込で
75 bytes 以下になるようにあらかじめ切る。
2. mb_send_mail() の仕様として、エスケープシーケンス込で
75 bytes 以上の行があるときにはエラーを返して送信しない
(マニュアルにも書いておく)
3. mb_send_mail() の仕様を UTF-7 や UTF-8 のメールを
出すことにする (! いちおう、マルチバイトの途中では
切らないようにしているコードが入っているようだから)
くらいがぱっと思いつく案ですね。
私は、この 3つの中ならば 2番が一番納得がいくな。
========================================================================
"Of course, we talk!" --Lina Lamont--
--
中川 恒雄 ( T.Nakagawa ) mailto:yaemon @ kikansha.jp
http://www.kikansha.jp/~yaemon/
PHP-dev メーリングリストの案内