PHPとMYSQLで文字化けで困っています。

日本語でもひらがな『あああ』とかはちゃんと入るし、
漢字で『文字化け』とDBに登録してWEBページに表示させると『文???け』みたいな中途半端な化け方です。
PHPはEUC-JPで書いてます。

レンタルサーバーでやっていて、初心者なので、phpmyadminでDB作ってやってます。
phpmyadmin上では該当データは『????????????????????????』のようにまったく表示されません。

以前別のサーバーでやっていた時は、特に設定とかしなくても、同じPHPファイルで正常に
動作していたのですが。。。。

どういったところを見直せばよいか、お心当たりのある方、ご教授お願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/07/23 14:46:12
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:zebevogue No.1

回答回数65ベストアンサー獲得回数7

ポイント49pt

まずは全てのエンコードを揃えてはいかがでしょう。

もし、データをMySQLにphpMyAdminでインポートしたのでしたら、
エクスポートしたファイルも揃えて入れ直してください。

多分壊れたデータがテーブルに入ってます。

他1件のコメントを見る
id:zebevogue

下の方に概ね同意です。
ですが、SET NAMESは使わない方が良いですよ。
http://kennyqi.com/archives/61.html
http://nonn-et-twk.net/twk/why-set-names-in-php-is-bad

2012/07/20 06:13:12
id:gwrite

ありがとうございます。
とりあえず、2つめに紹介していただいたとこに書いてある、
mysqli_set_charsetの使用を検討します。

2012/07/20 11:41:02

その他の回答2件)

id:zebevogue No.1

回答回数65ベストアンサー獲得回数7ここでベストアンサー

ポイント49pt

まずは全てのエンコードを揃えてはいかがでしょう。

もし、データをMySQLにphpMyAdminでインポートしたのでしたら、
エクスポートしたファイルも揃えて入れ直してください。

多分壊れたデータがテーブルに入ってます。

他1件のコメントを見る
id:zebevogue

下の方に概ね同意です。
ですが、SET NAMESは使わない方が良いですよ。
http://kennyqi.com/archives/61.html
http://nonn-et-twk.net/twk/why-set-names-in-php-is-bad

2012/07/20 06:13:12
id:gwrite

ありがとうございます。
とりあえず、2つめに紹介していただいたとこに書いてある、
mysqli_set_charsetの使用を検討します。

2012/07/20 11:41:02
id:jirepo No.2

回答回数30ベストアンサー獲得回数6

ポイント50pt

MySQLがUTF8がデフォルトになっている環境で、EUC-JPでPHPコードを書いている、すなわちクエリをEUC-JPで渡すので文字化けするわけですが、SET NAMES ujisを投げると、UTF8環境に対して、「EUCで書いたクエリを投げます」と事前に言っているので通るわけです。
そうして、MySQLデータベースにEUC-JPで保存されているデータを、レンタルサーバーのデフォルトでUTF-8で表示させるので化けて見えるのです。
phpMyAdminの文字コードをEUC-JP(ujis_japanese_ci)に切り替える事で文字化けを回避するという手もありますが、とにかく全体で文字コードを統一させるのがベストです。ではEUC-JPとutf8のどちらに統一すべきかと言えば昨今の主流はutf8だと思います。

それはそれとして、SET NAMES ujisを毎回投げるのが面倒なら、クエリを投げる処理を関数として作って、その中にSET NAMES ujisコマンドを書いておくというのもひとつの手ですが、それよりも、レンタルサーバーのデフォルトに合わせて、PHPもutf8で書くことをお勧めします。

id:gwrite

ありがとうございます。
そうですか、、、昨今はutf-8が主流ですか。。。

勉強用に買った本にはEUCが良いと書かれてたので、それにしたがってました。
たしかに古い本でした。

2012/07/20 11:42:05
id:mtnmso1 No.3

回答回数51ベストアンサー獲得回数4

ポイント1pt

DBの文字セットを確認してください。

  • id:gwrite
    とりあえず、照合順序ってところを、『utf8_unicode_ci』にしたら解決しました。
    もともとはujisになってました。

    これであってるのか? なんでそうなったかのか回答ください。
  • id:gwrite
    でもphpmyadminiで見ると『¤°¤é¤ó¤³』とかの不可視のデータになっちゃってます。。。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません