タイトルのフォームを作成しています
方法としては処理部分は全言語共通で言語毎にテンプレートを切り替える方式です
言語は日本語、ドイツ語なのですが、
ドイツ語のフォームに日本語を入力後POSTするとPHPのエラーが出力されます
(未定義の関数を呼び出そうとしています...というようなエラーですが関数は存在します)
現在のPHPの設定は下記の通りです
mbstring.detect_order auto
mbstring.encoding_translation On
mbstring.func_overload 0
mbstring.http_input UTF-8
mbstring.http_output UTF-8
mbstring.internal_encoding UTF-8
mbstring.language neutral
上記設定のmbstring.internal_endcodingをEUC等に変更すると
ドイツ語のフォームで日本語をPOSTしてもエラー等は起きなく
なりますが、肝心のドイツ語が部分的に文字化けを起こしてしまいます
これを解決する方法に心当たりのある方おられましたら
助言いただければと思います
よろしくお願いします
mbstring のサポートされるエンコーディングをご覧ください.
http://jp.php.net/manual/ja/mbstring.encodings.php
ドイツ語に使われる,ISO 8859-1~10 は対応しているようです.
UTF-8 での入出力を期待されているようですが,フォームの HTML は,きちんと UTF-8 で出力されているでしょうか.ここが,EUC-JP などに変換されていると,ブラウザは,EUC-JP でデータを送ってくることになり,エンコーディングの変換でエラーが出る可能性があります.(上記設定を見る限りは,問題はなさそうですが)
もし,UTF-8 で入力して,そのまま取り扱うのであれば,encoding_translation を off にしても問題ないはずなので,それを試してみてください.
php.iniの設定を以下のようにしてみてください。
mbstring.encoding_translation | off |
mbstring.http_input | pass |
mbstring.http_output | UTF-8 |
mbstring.internal_encoding | UTF-8 |
言語毎にテンプレートを切り替える方式
ここでテンプレートと言っているのは、HTMLコンテンツを指しますか?
であれば、ドイツ語も日本語も
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
になっていますか?
また、form タグの属性として enctype="multipart/form-data" を指定していますか?
ありがとうございます
上記のように自己解決してしまいました
今回の質問はエラー文まで載せるべきでした
ありがとうございます
encoding_translation を offにしてみましたが変化はありませんでした
出力されいていたエラーはDBに関するものだったのですが
SQLの発行時にSQLがUTF-8だったことが問題だったようです
(DBの文字コードはEUC-JPです)