2013年3月4日、ブログは以下のURLに移行しました。最新の記事はこちらで公開しています。
新しいブログでは、コメントやリンクが一部切れていたり、一部機能が調整中です。
新しいブログへ

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

投稿日:2007.04.27 / カテゴリ:コンピュータ / 投稿者: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の設定は前回のままにしておいてください。
これでうまくいくはずです。サイトからメールを送信して、確認してみてください。

コメント

まだコメントはありません。
このアイテムは閲覧専用です。コメントの投稿、投票はできません。