Joomla!を解剖せよ!~メールの文字化け2~

カテゴリ: コンピュータ / 公開日: 2007年4月27日(金曜)00:57 / 投稿者: Tom Goodsun
ということで、メールの文字化けを解消したがここでまた問題が浮上した。
サーバーはもちろん、それぞれ使用が違う。日本ではマルチバイト対応というのは当たり前と考えていい。しかし海外のサーバーではPHPのマルチバイト関数に対応していないサーバーもあるみたいです。

今回はそのあたりを解消していきたいと思います。 今回の課題はマルチバイト関数を使わずにエンコーディングの処理をするということです。もちろん一から作ってられないので、既存のライブラリ(?)を使います。

jcode.phpはマルチバイト関数を使わずにマルチバイト文字のエンコーディングを行うPHPのライブラリです。まずは以下のページから最新版をダウンロードしましょう。
http://www.spencernetwork.org/jcode/

もちろんreadme.txtを見れば分かるわけなんですが、とりあえずかいつまんでご説明しましょう。
ダウンロードしたファイルを解凍して、readme.txt以外の4つのファイルを/Joomla!のディレクトリ/components/com_contactにアップロードします。

前回編集したcontroller.phpを開き、2行目に以下の記述をしましょう。
require_once('jcode_wrapper.php');

この処理は先ほどのファイルを読み込んでいます。これらのファイルはエンコーディング処理のための関数を格納しています。今読み込んだファイルは、前回使用したPHPの組み込み関数mb_convert_encoding()っぽく使えるという優れものなのです。

次に前回の記述のある123行目付近。mb_convert_encoding()の「mb」を「jcode」に変更します。
//***** ORIGINAL CODE (BEGIN) *****
$name = jcode_convert_encoding ($name, "SJIS");
$body = jcode_convert_encoding ($body, "SJIS");
$subject = jcode_convert_encoding ($subject, "SJIS");
//***** ORIGINAL CODE ( END ) *****

ここで、先ほど読み込んだファイルに格納されているjcode_convert_encoding()という関数を使って変換処理をさせます。

ここまでの作業を保存してアップロード(上書き)してください。


またphpmailer.phpの設定は前回のままにしておいてください。
これでうまくいくはずです。サイトからメールを送信して、確認してみてください。