PHPのmb_encode_mimeheaderは事前にmb_internal_encodingが必要

PHPのmb_encode_mimeheader関数で文字列をエンコードするときは、直前にmb_internal_encoding関数で変換したい文字列のエンコーディングをセットしてから呼ばないとうまく動作しないもよう。エンコードした文字列の後ろのほうが化け化けになってしまう。例えば「ご登録いただきありがとうございます」が「ご登録いただきありがH$&$4$6$$$^$9」というふうに。

回避例として、以下のように書く。

// 元のエンコーディングを保存
$orgEncoding = mb_internal_encoding();
// 変換したい文字列のエンコーディングをセット
mb_internal_encoding($targetEncoding);
// エンコーディング実行
$encodedString = mb_encode_mimeheader($targetString, $targetEncoding, 'B', "\n");
// 保存しておいたエンコーディングに戻す
mb_internal_encoding($orgEncoding);


PHPのバージョンは5.1.2。

4 Comments

  1. http://blog.poyo.jp/
    <strong>mb_internal_encoding()は必須か? - よくきたblog</strong> はてなダイアリーのよくきたはてなから移動.mbstringで日本語を扱う上では「必須」になります. 理由はデフォルトは「ISO-8859-1」なので. し...
  2. PukiWiki (PukiWiki/TrackBack 0.3)
    <strong>:備忘録</strong> :備忘録 気になる書籍 &dagger; 管理職要覧〔改訂版〕―日本的MTP システム分析・改善...
  3. LEGGODT.COM
    <strong>PHPで日本語を使うのだ</strong> 新しいサーバーをいじるときに必ずやらなければ行けないこと。 それは日本語、マル...
  4. CPA-LABテクニカル
    <strong>mb_encode_mimeheaderの都市伝説を検証する</strong> ■mb_encode_mimeheader都市伝説mb_encode_mimeheaderは、なんか使いにくい。文字化けする。とあまり良い評判を聞きません...