人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP初心者です。共通URLで携帯、PC双方から閲覧できる簡易なサイトを作っています。

POSTで値を渡したときに、入力値がひらがなだと文字化けしてしまうのですが、その対策を調べたところ「入力エンコードが特定できないため難しい」というのが大半の見解でした。「hiddenでvalue="あ"を入れると良い」という話もありましたが、試したところガセでした。

なおソースのエンコードは携帯に対応させるためSJISとしています。

明確なソリューションをご存知の方、ご教授いただけると幸いです。

●質問者: さとし
●カテゴリ:ウェブ制作
✍キーワード:pc PHP SJIS URL ひらがな
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●35ポイント ベストアンサー

応急処置ですが、たとえば 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は使えるはずですよね。


2 ● pahoo
●35ポイント

「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 です。

◎質問者からの返答

解決しました。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ