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

komura komura @ ma9.seikyou.ne.jp
2005年 7月 16日 (土) 20:24:27 JST


komura です。

On Sat, 16 Jul 2005 17:54:18 +0900
Seiji Masugata <s.masugata @ digicom.dnp.co.jp> wrote:

> > mb_decode_mimeheader() は対応しているようです。
> > 正しくエンコードされている文字列をデコードさせると成功しました。
> >  
> > これは mb_encode_mimeheader() に問題があるようですね。
> > UTF-8 でのエンコードに失敗しているようです。
> 
> あら。そっちは見逃してました。
 
少し調べてみたところでは、バグとは言えないようです。
以下のように、内部エンコーディングを指定して mb_encode_mimeheader() を使用
すれば正しく出力されました。

  <?php
  mb_internal_encoding( 'UTF-8' );

  $A =  mb_encode_mimeheader( mb_convert_encoding( "表題", "UTF-8", "EUC-JP" ), "UTF-8" );
  var_dump( $A );
  $B = mb_decode_mimeheader( $A );
  var_dump( $B );
  var_dump( mb_convert_encoding( $B, "EUC-JP", "UTF-8" ) );
  ?>
  --
  string(20) "=?UTF-8?B?6KGo6aGM?="
  string(6) "茵
  string(4) "表題"

  または、以下のようにしても正しく出力されました。

  <?php
  mb_internal_encoding( 'EUC-JP' );
  $A = mb_encode_mimeheader( "表題", "UTF-8" );
  var_dump( $A );
  $B = mb_decode_mimeheader( $A );
  var_dump( $B );

  $A = mb_encode_mimeheader( "表題", "UTF-8", "Q" );
  var_dump( $A );
  $B = mb_decode_mimeheader( $A );
  var_dump( $B );
  ?>
  --
  string(20) "=?UTF-8?B?6KGo6aGM?="
  string(4) "表題"
  string(30) "=?UTF-8?Q?=E8=A1=A8=E9=A1=8C?="
  string(4) "表題"

mbstring 関連の関数で、内部で自動変換を行ってくれるものは使用する際に
内部エンコーディングに注意した方が良さそうです。

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


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