2006年11月23日木曜日

続・MODx言語環境を修正

現在のMODxで直面している問題をいったん整理。
  1. メールでの文字化けは起こっていない(間違い)。しかし、ヘッダにはcharasetの指定が無いのでメーラは正しくエンコードできない場合がある。
  2. WEBサインアップの際、登録した住所か漢字一文字目以降が表示されない。
    重大な事が発覚--ZeRoさんのアドバイスに沿って英数Onlyで登録してみたところ
    Tokyo hogehoge... ⇒ Tokyo までしか登録されていない。〒も
    123-4567 ⇒ 123-4 までしか登録されておらず
    文字化けの問題じゃないのかぁ...(MySQLは文字セットUTF8、照合順序utf8_unicode_ci で正しくセット
  3. ContactFormから問い合わせを送信するとエラー発生
改善、追加したいこと
  1. ユーザーの登録項目を任意のものを追加したい(簡単に)
  2. eFormなるものは何か知りたい(前から気になってた)
  3. ユーザによる個人情報変更画面ってあるのか(まだ調べておらず)

さて、ここから本題

PHP初心者には非常に参考になる記事を発見!
PHPの内部の仕組みと文字化けの要因、mail()関数->mb_send_mail()関数の置き換えの方法
Yet Another 仕事のツール
第64回 phpCollabでプロジェクト管理(4) メール送信の文字化けを解消する

...mail()とは別に、文字エンコーディングの変換機能を持たせたものが、mbstring拡張に含まれる「mb_send_mail()」関数だ。つまり、mail()関数をmb_send_mail()関数に置き換えれば、メールの文字化けは解消される...スクリプト中でmail()関数を使用している箇所を洗い出して、全部 mb_send_mail()に書き換えるというのもかなり面倒である。そこで、php.ini設定ファイルの、mbstring.func_overloadパラメータを「1」に設定すれば、自動的に全てのmail()関数の代わりにmb_send_mail()関数が実行される。

; overload(replace) single byte functions by mbstring
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
mbstring.func_overload = 1
<続きあり>
試してみたが変わらず。でも考えてみたらこの文字化けってmail関数って関係あるのかな?追ってみないとわからないんだけど、メールの文字化けじゃなくてMySQLへの登録時の文字化けなのではないだろうか。
2chの投稿
grep で調べたところ、MODxでは明示的に SET NAMES されてないようです。
そこで、ためしに manager/includes/header.inc.php の5行目に
$sql="SET NAMES utf8;";
mysql_query($sql);
を参考に同様のことをやってみたが、正しく表示されていた日本語の姓名まで文字化けする羽目に。

0 件のコメント: