ZendFramework 1.7.5でもメールの件名は文字化け

短い件名だと問題なかったんですが、長くなると後半が化けてしまいました。
ので、今まで通り、Zend/Mail.phpのsetFromとsetSubjectを修正。
setSubjectは以下のように修正しました。

//$this->_subject = $this->_encodeHeader($subject);
mb_language('ja');
$lang = mb_internal_encoding();
mb_internal_encoding('ISO-2022-JP');
$this->_subject = mb_encode_mimeheader($subject, 'ISO-2022-JP');
mb_internal_encoding($lang);

setFromも同じ要領で。

ZendFramework 1.7.5へ

ZendFramework1.5.2から現状不足している機能がなかったので、
そのままバージョンアップしてなかったんですが、今回Zend_Dateの日付計算で
不具合が出たので、最新の1.7.5にバージョンアップしました。

嬉しかった点は、Zend/Mail.phpの中身を編集しなくても
文字化けをしないように設定できるようになった部分。
これをやるのがおっくうでバージョンアップしてなかったのもあったので。
こんなふうにsetEncodingOfHeadersでbase64を指定できるようになってました。

public static function sendInfo($params)
{
  $mail = new Zend_Mail('ISO-2022-JP');
  $mail->setEncodingOfHeaders(Zend_Mime::ENCODING_BASE64);
  $mail->setBodyText(self::_encode(trim($params['body'])), 
            null, 
            Zend_Mime::ENCODING_7BIT)
     ->setSubject(self::_encode($params['subject']))
     ->setFrom('yyyy@yyyy', 'zzzz');
     ->addTo('xxxx@xxxxxx');
     ->send();
}

private static function _encode($str)
{
  return mb_convert_encoding($str, 'ISO-2022-JP', 'UTF-8');
}

少しはまったのが、Zend_Date。new Zend_Date(‘xxxx-xx-xx’)とやると
クラスを生成できてたのですが、Localeがうまく取得できなくなっているようでした。
以前、ソースをおったときは、ブラウザから情報を取得していたし、
今回ざっと見た時もそれっぽい部分があったのですが、なぜかLocaleでエラーになります。

Zend_Registryを使って、’Zend_Locale’に’ja_JP’を設定しておけば、
設定したLocaleを利用してくれるので、index.phpで設定して問題を回避しました。
ソースをちゃんと見たいところですが、今は問題解決が先です。

お得期間

このサイトに限らず、co-hey.com関連は、hetemlというレンタルサーバで運営してます。
php5も使えるし、ZendFrameworkも動くし、MTやWPもOK。

共用サーバだから、アクセスが集中しすぎるのはまずいだろうけど、
僕のサイトはそんなことにはならいので、快適に使ってます。

今、初期費用無料期間中なので、今までよ4000円くらいお得。
サーバ乗換とか検討しているなら、候補にいれてもいいかもです。

プログラムできるけど、サーバの知識があまりない僕にとっては、
共用サーバはとてもありがたい。専用サーバで、全部管理は無理っぽい。