PHPのmb_encode_mimeheader()で文字化けを回避する。

mb_encode_mimeheader()で文字列を変換する際は、事前にmb_internal_encoding()にてエンコードを統一しておかなければならない。

ということで以下のような処理が必要になる。

※メール送信クラスより引用

protected function mem($var) {
	// 関数の存在チェック
	$internalEncoding = function_exists('mb_internal_encoding');
	if($internalEncoding) {
		// 現在のエンコード設定を保存
		$restore = mb_internal_encoding();
		// 変換したい文字エンコードを設定
		mb_internal_encoding('UTF-8');
	}
	// 文字列を変換
	$return = mb_encode_mimeheader($var, 'UTF-8', 'B');
	// 処理後、変更していた文字コードを戻す
	if($internalEncoding) mb_internal_encoding($restore);
	// 値を返却
	return $return;
}

mb_encode_mimeheader()第3引数の’B’は「Base64」エンコードという意味。
‘Q’を指定すると「Quoted-Printable」になる。
デフォルトは’B’。

まぁ実際、関数の存在チェックまではやらなくてもいいと思う(適当)。