[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 メーリングリストの案内