[PHP-dev 1160] mb_encode_mimeheader() が正常に動作しない件について

komura komura @ ma9.seikyou.ne.jp
2005年 7月 16日 (土) 14:28:34 JST


komura です。

PHP 4.4.0 で mb_encode_mimeheader() を使用すると件名が文字化けする件について
ですが、少し調べてみました。

おそらく、前の Patch で文字列に '?' '=' '_' が最初に含まれている場合は
MIME エンコード処理を行うように変更したと思うのですが、以下の行で変数 c が
日本語文字列場合、256 以上の値が返ってくるため、ASCII 文字列と認識してしまう
ことがあるようです。

	if (!qp_table[(c & 0xff)]) { /* ordinary characters */

c が 256 より小さい場合のみという条件を加えてテストした限りでは特に動作には
問題なさそうです。

	if (c < 256 && !qp_table[(c & 0xff)]) { /* ordinary characters */

PHP 5.0.x や PHP 5.1 のベータ版では確認はしていませんが、PHP 4.4.0 でテスト
したPatch を添付しますので、もしよければどなたかテストしてみてください。
Patch ではコメントの間違いと思われる部分も修正しています。


別の話ですが、mbfilter.c には最初に charset=UTF-8 と書かれていますが、
コメントは EUC-JP で書かれていますので、エディタによっては化けます。
可能であれば、どちらかに統一して欲しいところです。

-- 
komura <komura @ ma9.seikyou.ne.jp>
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: mbfilter.c.patch
型:         application/octet-stream
サイズ:     1111 バイト
説明:       無し
URL:        http://ns1.php.gr.jp/pipermail/php-dev/attachments/20050716/69fd1639/mbfilter.c.obj


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