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。
mb_internal_encoding()は必須か? - よくきたblog
はてなダイアリーのよくきたはてなから移動.mbstringで日本語を扱う上では「必須」になります. 理由はデフォルトは「ISO-8859-1」なので. し...
:備忘録
:備忘録 気になる書籍 † 管理職要覧〔改訂版〕―日本的MTP システム分析・改善...
PHPで日本語を使うのだ
新しいサーバーをいじるときに必ずやらなければ行けないこと。 それは日本語、マル...
mb_encode_mimeheaderの都市伝説を検証する
■mb_encode_mimeheader都市伝説mb_encode_mimeheaderは、なんか使いにくい。文字化けする。とあまり良い評判を聞きません...
[...] もう少しだけ調べてみると、内部文字コードを一時的に変換対象文字列の文字コードにあわせるという方法でも回避可能らしい。 [...]
[...] PHPのmb_encode_mimeheaderは事前にmb_internal_encodingが必要 [...]
[…] PHPのmb_encode_mimeheaderは事前にmb_internal_encodingが必要 これだからPHPはめんどくさいんだよ。。。 […]