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

komura komura @ ma9.seikyou.ne.jp
2005年 7月 16日 (土) 17:37:38 JST


komura です。

On Sat, 16 Jul 2005 15:38:14 +0900
Seiji Masugata <s.masugata @ digicom.dnp.co.jp> wrote:

> 桝形です。
> 
> > PHP 5.0.x や PHP 5.1 のベータ版では確認はしていませんが、PHP 4.4.0 でテスト
> > したPatch を添付しますので、もしよければどなたかテストしてみてください。
> > Patch ではコメントの間違いと思われる部分も修正しています。
> 
> PHP 4.4.0 での確認ですが、適当したら短い文字でも化けなくなりました。
> スバラシイ。

すみません。前の Patch は問題があるかもしれません。
別のメールで訂正しました。


> 別のトコロで気になったのですが、mb_decode_mimeheaderはISO-2022-JP以外は
> 対応してないのでしょうか。バグなのか仕様なのか、気になります。
> 
> http://jp.php.net/manual/ja/function.iconv-mime-decode-headers.php
> 
> See also iconv_mime_decode(), mb_decode_mimeheader(), imap_mime_header_decode(),
> imap_base64() and imap_qprint(). 
> 
> と書いてあったたので、mbsgringも対応してるモノだと思ってました。

mb_decode_mimeheader() は対応しているようです。
正しくエンコードされている文字列をデコードさせると成功しました。
 
$ php -r 'echo mb_decode_mimeheader( "=?UTF-8?Q?=E8=A1=A8=E9=A1=8C?=" );'
表題 
$ php -r 'echo mb_decode_mimeheader( "=?UTF-8?B?6KGo6aGM=?=" );'
表題

> [masugata @ localhost]$ less -N rm6.php
>        1 <?
>        2 $A =  mb_encode_mimeheader( mb_convert_encoding( "表題", "UTF-8", "EUC-JP" ), "UTF-8" );
>        3 var_dump( $A );
>        4 $B = mb_decode_mimeheader( $A );
>        5 var_dump( $B );
>        6 var_dump( mb_convert_encoding( $B, "EUC-JP", "UTF-8" ) );
>        7
>        8
>        9 $A =  mb_encode_mimeheader( mb_convert_encoding( "表題", "UTF-8", "EUC-JP" ), "UTF-8", "Q" );
>       10 var_dump( $A );
>       11 $B = mb_decode_mimeheader( $A );
>       12 var_dump( $B );
>       13 var_dump( mb_convert_encoding( $B, "EUC-JP", "UTF-8" ) );
>       14
>       15 ?>
> 
> [masugata @ localhost]$ ./php-4.4.0 rm6.php
> string(20) "=?UTF-8?B?6Iy1Pz8=?="
> string(4) "茵??"
> string(2) "??"
> string(27) "=?UTF-8?Q?=E8=8C=B5=3F=3F?="
> string(4) "茵??"
> string(2) "??"

これは mb_encode_mimeheader() に問題があるようですね。
UTF-8 でのエンコードに失敗しているようです。

-- 
komura <komura @ ma9.seikyou.ne.jp>


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