[PHP-users 33661] Re: PEAR :: Mail_mimeDecode におけるマルチパートの取り出しについて

KOYAMA Tetsuji koyama @ hoge.org
2008年 6月 16日 (月) 18:10:49 JST


小山です。

2008/6/16 Omori <toshi @ asama.net>:
> PEAR :: Mail_mimeDecodeでメールの解析処理をしようとしていたのですが
> マルチパートのメールの処理で、
>
> Content-Type: multipart/mixed; boundary="------------Boundary_VzNO'cXjoRsGb9s"
>
> のようにboundaryの途中に「'」の入ったメールがエラーになりました。
> RFCをぐぐって見たのですがこれ自体は間違いではないような気がするのですが、
> よくわかりません^^;

RFC 2046を見ると

    boundary := 0*69<bchars> bcharsnospace
     bchars := bcharsnospace / " "
     bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" /
                      "+" / "_" / "," / "-" / "." /
                      "/" / ":" / "=" / "?"

と「'」 が明示的に許可されているので、boundaryに「'」が入るのは
仕様違反ではないと思います。

> mimeDecode.phpの454行目付近の
> $splitRegex = '/([^;\'"]*[\'"]([^\'"]*([^\'"]*)*)[\'"][^;\'"]*|([^;]+))(;|$)/';
>> $splitRegex = '/([^;\']*[\']([^\']*([^\']*)*)[\'][^;\']*|[^;"]*["]([^"]*([^"]*)*)["][^;"]*|([^;]+))(;|$)/';
> とすることでうまく処理されているような気がしますがどうも正規表現は苦手で
> 正解かどうかもわかりません。

なるほど、「'」と「"」でくくられた場合をそれぞれ分けたんですね。
私にもこれが正しいかどうかの判断はできないので、バグレポート
してみてはどうでしょう?

http://pear.php.net/bugs/report.php?package=Mail_Mime

-- 
 小山哲志@ビート・クラフト
 koyama @ beatcraft.com
 koyama @ hoge.org


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