PHP 自体の設定に間違いがありそうです。phpinfo() の出力表示をチェックして mbstring まわりの設定が正しく行われていることを確認してください。
(例 お名前[text text-123] とした場合「お名前」は文字化けしませんが[text text-123]に入力した日本語は文字化けします。)
この状況から推測すると mbstring.http_input に関係がありそうな気がします。
上の回答がよく理解できない場合はサーバー管理者またはサーバーのサポート窓口に相談してください。
あと、Outlook はそれ自体に問題があるので検証にはほかのメーラーを使った方が間違いが少ないと思いますよ。
それと、たとえ mbstring の設定が全部正しいとしても、UTF-8 のメール本文に携帯からの Shift-JIS のフォーム入力文をそのまま取り込んだりした場合には当然文字化けしますよね。このケースの場合には何かしらのエンコーディングを揃える処理を加える必要があると思います。
Mobile Eye+ の仕様をよく知らないので外してるかもしれませんが、ひとつの可能性として。
Mobile Eye+ と Contact Form7 の併用の場合は、何か特殊な方法で Shift_JIS → UTF-8 の変換処理を追加しないと *確実に* 文字化けします。他の問い合わせフォームプラグインでも同様です。
Ktai Style + Contact Form 7 の組み合わせの場合のみ、Ktai Style 側で文字コード変換処理が自動でされるようになっているので文字化けが避けられるのです。それ以外の場合は文字化けして当然と考えてください。
「諸般の事情」がよく分かりませんが、PHP4 はサポートが終了したプラットフォームですので、使い続けるのは危険です (具体的な脆弱性のリスト)。
PHP4 を継続して使うことが許されるのは、特注のウェブアプリケーションで PHP5 対応するコストがかけられないとか、そういう場合に限られます。WordPress 自体はすでに PHP5 対応しているわけですから、万難を排して PHP5 対応のサーバーに移るべきです。
ご回答ありがとうございます。
Takayuki Miyoshiさん、IKEDA Yurikoさん
回答ありがとうございました。
Takayuki Miyoshiさんからいただいた回答
この状況から推測すると mbstring.http_input に関係がありそうな気がします。
をヒントに調べたところ.htaccessに下記を追記することで解決しました。
<IfModule mod_php4.c>
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 On
php_value mbstring.http_input auto
php_value mbstring.http_output UTF-8
php_value mbstring.internal_encoding UTF-8
php_value mbstring.substitute_character none
</IfModule>
大変助かりました。
ありがとうございました。
mbstring.encoding_translation On
という設定は、プログラム側に存在するエンコーディング検出変換ロジックとコンフリクトを起こす可能性があるため、限られた環境でそのリスクを理解したうえで利用するものと考えてください。
特別な理由がない限りこの値は Off にしておくことをおすすめします。
tenpuraさん。回答ありがとうございます。
ご指摘いただいた.htaccessのmbstring.encoding_translation On
の記述ですが
On → Offにしてみたところ文字化けが再現しました。
(携帯からContactForm7のメールフォーム画面に入力して送信したメールが文字化けします。)
現在はOnに戻しています。
今後は教えていただいたコンフリクトの可能性とリスクを意識しておこうと思います。
ありがとうございました。
わたしも mbstring.encoding_translation On
はおすすめしません。これを On にすると、他の部分で文字化けする可能性が大です。例えば、コメントフォームの入力が化けたりする可能性があります。特に、「半角カナのみ」を入れた場合に EUC-JP と誤認してしまい、それを UTF-8 に変換しようとして変なことが起こりそうです。
自動変換に頼らず、フォームを受け取る部分で「is_mobile()
が true ならば文字コードを変換する」というコードを追加した方が安全です。
# 「解決」とは言い難い状況だと思うので未解決に戻します。
IKEDA Yurikoさん。回答ありがとうございます。
これを On にすると、他の部分で文字化けする可能性が大です。例えば、コメントフォームの入力が化けたりする可能性があります。特に、「半角カナのみ」を入れた場合に EUC-JP と誤認してしまい、それを UTF-8 に変換しようとして変なことが起こりそうです。
上記ご指摘を受けましてmbstring.encoding_translation On
の状態で
半角カナのみを使用して下記の動作検証をしてみました。
・PCからContactForm7で作成したメールフォーム画面に入力して送信されたメールを見る
・PCからWordpressの記事のコメント欄に入力してコメントを見る
・携帯からWordpressの記事のコメント欄に入力してコメントを見る
・携帯からContactForm7のメールフォーム画面に入力して送信されたメールを見る
結果はすべてにおいて、文字化けしたり不具合が起きることはありませんでした。
自動変換に頼らず、フォームを受け取る部分で「is_mobile()
が true ならば文字コードを変換する」というコードを追加した方が安全です。
当方、PHPはやったことがなくまったくの素人です。
具体的にはどこのファイルにどんなコードを入れればいいのでしょうか?
大変恐れ入りますが、ご教授いただければ幸いです。
よろしくお願いいたします。