入力値のエンコードがおかしい - PHPプロ!Q&A掲示板

330

  • 100P

入力値のエンコードがおかしい

質問日時 / 2007年1月30日 00:48    回答数 / 4件

Questioner:  september  このエントリーをはてなブックマークに追加 

キーワード / 入力値    文字コード   

あるスクリプトへポストで値を渡す処理をしているのですが、
どうしても文字コードがおかしいままです。
コードのおかしい部分を簡潔にまとめると以下のようになります。
スクリプト自体はUTF-8です。

  1. <?php
  2. mb_internal_encoding('UTF-8');
  3. mb_http_input('UTF-8');
  4. mb_http_output('UTF-8');
  5.  
  6. print_r($_POST);
  7. ?>
  8.  
  9. <form action="" method="post">
  10.  <input type="text" name="hoge" value="" />
  11.  <input type="submit" value="submit" />
  12. </form>

適当な日本語をポストしてやると全て文字化けしてしまうのですが、
どなたか分かる方がいらっしゃいませんでしょうか。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01lowol>>CODE echo mb_detect_encoding($_POST["hoge"]);
┃┗A01-1septembermb_detect_encodingはSJISです。 default_charsetにE
┗A02dozoyousanこうしてもダメでしたか? >>CODE <?php mb_inte
 ┗A02-1september頂いたコードでは文字化けが起こりませんね。 mb_htt

回答一覧

並び替え:

A01 満足
answererlowol [1月30日 01:56]

  1. echo mb_detect_encoding($_POST["hoge"]);
で文字コード調べてみるとかどうですか?

php.iniのdefault_charset設定とかはどうですか?

この意見に回答する

ツリーへ TOPへ

A01-1
replyerseptember [1月30日 16:54] (最終編集:1月30日 19:43)

mb_detect_encodingはSJISです。
default_charsetにEUC-JPを指定していました。
default_charsetをコメントアウトすることで解決しますね、もうちょっと勉強します。
ありがとうございました。

この意見に回答する

ツリーへ TOPへ

A02 満足
answererdozoyousan [1月30日 02:03] (最終編集:1月30日 02:08)

こうしてもダメでしたか?

  1. <?php
  2. mb_internal_encoding('UTF-8');
  3. mb_http_input('none');
  4. mb_http_output('none');
  5. ?>
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  9. <title>Re:入力値のエンコードがおかしい</title>
  10. </head>
  11. <body>
  12. <? print_r($_POST)?>
  13. <form action="" method="post">
  14.  <input type="text" name="hoge" value="" />
  15.  <input type="submit" value="submit" />
  16. </form>
  17. </body>
  18. </html>

マルチバイト関数と文字化けとは関わりがあるようでなかったりするので注意が必要です。
あと、mb_http_outputmb_output_handlerを引数にしたob_startを併用しないと利用されなかった気がします。

UTF-8は別の理由で文字化けしたりもします。
IEの[表示]-[エンコード]の[自動選択]にチェックが入っていると文字化けすることがあります。
付けたり外したりして状態を確認してください。

この意見に回答する

ツリーへ TOPへ

A02-1
replyerseptember [1月30日 16:59]

頂いたコードでは文字化けが起こりませんね。
mb_http_outputについては、マニュアルを見る限りでは、mb_outupt_handlerについての記述はありませんね。この辺はもう少し調べてみたいと思います。

私のスクリプトですが、SJISで入力し、それをdefault_charset=EUCで解釈していたため、おかしかったようです。dozoyousanさんのようにMETAタグでUTF-8を指定し、defautl_charsetをコメントアウトすることで解決しました。

あと、使っているブラウザはFireFoxです。IEを使うときには気をつけるようにします。

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

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)