Joomla!を解剖せよ!~メールの文字化け2~
ということで、メールの文字化けを解消したがここでまた問題が浮上した。
サーバーはもちろん、それぞれ使用が違う。日本ではマルチバイト対応というのは当たり前と考えていい。しかし海外のサーバーではPHPのマルチバイト関数に対応していないサーバーもあるみたいです。
今回はそのあたりを解消していきたいと思います。
サーバーはもちろん、それぞれ使用が違う。日本ではマルチバイト対応というのは当たり前と考えていい。しかし海外のサーバーではPHPのマルチバイト関数に対応していないサーバーもあるみたいです。
今回はそのあたりを解消していきたいと思います。
今回の課題はマルチバイト関数を使わずにエンコーディングの処理をするということです。もちろん一から作ってられないので、既存のライブラリ(?)を使います。
jcode.phpはマルチバイト関数を使わずにマルチバイト文字のエンコーディングを行うPHPのライブラリです。まずは以下のページから最新版をダウンロードしましょう。
http://www.spencernetwork.org/jcode/
もちろんreadme.txtを見れば分かるわけなんですが、とりあえずかいつまんでご説明しましょう。
ダウンロードしたファイルを解凍して、readme.txt以外の4つのファイルを/Joomla!のディレクトリ/components/com_contactにアップロードします。
前回編集したcontroller.phpを開き、2行目に以下の記述をしましょう。
この処理は先ほどのファイルを読み込んでいます。これらのファイルはエンコーディング処理のための関数を格納しています。今読み込んだファイルは、前回使用したPHPの組み込み関数mb_convert_encoding()っぽく使えるという優れものなのです。
次に前回の記述のある123行目付近。mb_convert_encoding()の「mb」を「jcode」に変更します。
ここで、先ほど読み込んだファイルに格納されているjcode_convert_encoding()という関数を使って変換処理をさせます。
ここまでの作業を保存してアップロード(上書き)してください。
またphpmailer.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 ) *****
$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の設定は前回のままにしておいてください。
これでうまくいくはずです。サイトからメールを送信して、確認してみてください。
コメント