MODxでモバイルサイト構築 eFormの文字コード問題を解決

MODx:1.0.5J-r1
eForm:1.4.4.6
MODxエンコード:UTF-8
モバイルテンプレート:Shift_JIS
MobileConverter2.0設定:&charset=Charset;string;Shift_JIS

MODxでPCサイトとモバイルサイトを構築したが、モバイルのテンプレートの文字コードをShift_JISにしても、eFormのメールフォームで文字化けする問題が起きた。

モバイルサイトは文字化け等なく正常にSJIS表示されているのだが、eFormがデフォルトのUTF-8なので、フォームの入力内容が文字化けしてしまう。

3日ほど試行錯誤ののち、昔、EUC-JPで作った.phpを強制的にShift_JISで出力した方法を思い出した。

要はPHPはUTF-8で、出力されたhtmlはShift_JISであれば問題ないのだ

MODxのルート階層にある.htaccessの44行目あたりから


# サーバの日本語設定が不安定な場合は下記のコメントを外して有効にしてください
# For UTF-8
php_flag output_buffering Off
php_value output_handler none
php_value default_charset UTF-8
php_value mbstring.language Japanese
php_flag mbstring.encoding_translation Off
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.internal_encoding UTF-8
php_value mbstring.substitute_character none

マルチバイト文字列関数の以下の三カ所を変更


php_flag mbstring.encoding_translation On
php_value mbstring.http_input auto
php_value mbstring.http_output auto

これでDocomoの携帯でのeFormの文字化け問題が解消しました。

※絶対にやってはいけないこと!

PCサイトもモバイルサイトも両方Shift_JISでいいなどと考えて、mbstring.http_inputとmbstring.http_outputをSJISに指定するのは絶対やめましょう。
MODxの管理画面はUTF-8(もしくはEUC-JP)で動作しています。
間違えてここをSJIS指定にしてしまうと、管理画面で編集したチャンクやスニペットの日本語部分が文字化けします。
僕はうっかりチャンクを2つほど文字化けさせてしまい、修正が大変でした。
以上失敗談でした。

今回変更した三カ所はあまり推奨されてないみたいなので、自己責任でお願いいたします。

MODxでeFormの[+postdate+]を日本語に最適化

MODXバージョン:1.0.5J-r1
eFormバージョン:1.4.4.6

eFormの[+postdate+]のこのような表示を↓

————————————————–
 お問い合わせ日:30- 3月-2011 10:09:53
————————————————–

下記のように修正できます。

————————————————–
 お問い合わせ日:2011年 3月31日 11:15:12
————————————————–

力技かも知れませんが、strftime() 関数の文字列を書き換えます。

assets/snippets/eform/eform.inc.php
の340行目あたりを以下のように書き換える。


# set postdate
//$fields['postdate'] = strftime("%d-%b-%Y %H:%M:%S",time());
$fields['postdate'] = strftime("%Y年%b%d日 %H:%M:%S",time());

オリジナルをコメントアウトで残しておく事をお勧めします。