POSTで値を渡したときに、入力値がひらがなだと文字化けしてしまうのですが、その対策を調べたところ「入力エンコードが特定できないため難しい」というのが大半の見解でした。「hiddenでvalue="あ"を入れると良い」という話もありましたが、試したところガセでした。
なおソースのエンコードは携帯に対応させるためSJISとしています。
明確なソリューションをご存知の方、ご教授いただけると幸いです。
応急処置ですが、たとえば hoge というPOST変数で渡す場合、
mb_convert_encoding($_POST['hoge'], 'SJIS', 'EUC-JP,UTF-8'); または mb_convert_encoding($_POST['hoge'], 'SJIS', 'auto');
のようにしてみてください。
関数 mb_convert_encoding を利用し、自動的に SJIS に変換します。
携帯サイト(HTML)もPHPスクリプトを置いているのと同じサーバにあるということですよね。
であれば、原因として、"php.ini" の設定のうち
の2つが正しくないのかもしれません。
抜本的対策は、拙作「ページ間での文字化けを解消する」をご参考ください。
応急処置ですが、たとえば hoge というPOST変数で渡す場合、
mb_convert_encoding($_POST['hoge'], 'SJIS', 'EUC-JP,UTF-8'); または mb_convert_encoding($_POST['hoge'], 'SJIS', 'auto');
のようにしてみてください。
関数 mb_convert_encoding を利用し、自動的に SJIS に変換します。
携帯サイト(HTML)もPHPスクリプトを置いているのと同じサーバにあるということですよね。
であれば、原因として、"php.ini" の設定のうち
の2つが正しくないのかもしれません。
抜本的対策は、拙作「ページ間での文字化けを解消する」をご参考ください。
いつもありがとうございます。
・mbstring.http_input を pass にする
・mbstring.internal_encoding をSJISする
・POST 渡しする側の HTML フォームを SJIS
を行った上で実行したところ、以下のエラーが出ました。
Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unable to detect character encoding in ...
なおPHP Versionは 5.2.9なので、mb-convert-encodingは使えるはずですよね。
「function が無いよ」エラーではないので、mb_convert_encoding は使えると思います。念のため、phpinfo を実行して、mbstring の項目が表示されることを確認してください。
次に、下記だけの変更で状況が改善するかどうか確認してください。
・mbstring.http_input を pass にする ・mbstring.internal_encoding をSJISする
それでもダメなようでしたら、mb_convert_encoding を使います。
エラーの原因は第3引数の 'auto' が効いていないのかもしれません。
まず、
mb_convert_encoding($_POST['hoge'], 'SJIS', 'EUC-JP,UTF-8');
にしてみてください。
それでもうまくいかないようでしたら、関数 mb_language で日本語を指定してみてください。
mb_language('ja'); mb_convert_encoding($_POST['hoge'], 'SJIS', 'auto');
mb_languageはプログラムの冒頭で指定するのが more better です。
解決しました。
ありがとうございました。
いつもありがとうございます。
・mbstring.http_input を pass にする
・mbstring.internal_encoding をSJISする
・POST 渡しする側の HTML フォームを SJIS
を行った上で実行したところ、以下のエラーが出ました。
Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unable to detect character encoding in ...
なおPHP Versionは 5.2.9なので、mb-convert-encodingは使えるはずですよね。