• ベストアンサー

ブラウザーで日本語が文字化けする(PHP+MySQL)

以下の現象に対処したいのですが、どうすればいいか弱っています。 (1) phpMyAdminからSQLでテーブルに日本語を挿入して、 PHPプログラムでブラウザー表示すると文字化け(?????で表示)する。 phpMyAdminでこのデータを表示すると、正しく日本語表示されている。 (PHPプログラム内で直接日本語データを記述して挿入しても同じ現象となる) (2) ブラウザーで日本語を入力してPHPプログラムで受取りMySQLに出力して、 そのデータをPHPプログラムでブラウザー表示すると問題なく日本語が表示される。 phpMyAdminでこのデータを表示すると、文字化け(ぐじゃぐじゃの文字で表示)する。 利用しているホスティングサービスは、お名前・COMのVPSプラン 実行時の環境 MySQL: サーバのバージョン: 5.0.77 サーバ: Localhost via UNIX socket MySQL の文字セット: UTF-8 Unicode (utf8) MySQL の接続照合順序: utf8_unicode_ci PHP : PHP5を使用 phpプログラムは、UTF-8で記述。 出力されるHTMLの文字セット <meta http-equiv="Content-type" content="text/html; charset=utf-8" />

質問者が選んだベストアンサー

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

MySQLに接続後に、mysql_set_charset('utf8');または(環境によっては)、"SET NAMES utf8"をクエリー発行してませんよね? MySQL の接続照合順序: utf8_unicode_ci は使い道が違うのか、クライアントからUTF8のクエリーを発行しても、PHPMyAdminでは文字化けしてしまうという事に散々悩まされました。 接続照合順序って言い方からすると、クライアントからのSQLの文字コードはUTF8であるという意味かと思えるのに。文字化けするって結果からみると、たぶん違うのでしょう。 ※私自身、ここは理解できていません。ただ、mysql_set_charset('utf8');をすると文字化けせずに正常に登録されるので、それ以上の追求をしていない状態。 私が悩まされていたのと同じ現象なので、mysql_set_charset('utf8');でOKでしょう。

cow2010
質問者

お礼

貴重なアドバイスありがとうございました。 下記の通り問題解決しました。 (1) mysql_set_charset('utf8');を現況環境下で使用できませんでした。(バージョンの問題と思います) (2) SET NAMES utf8をクエリー発行したら、質問現象(1)が解消しました。同時に質問現象(2)についても意図通りに日本語が格納・表示できました。 うれしい!!!

その他の回答 (1)

noname#111181
noname#111181
回答No.1

phpMyAdminはログイン時に文字コードセットを指定するようになっていますが、これがutf-8になっていないということはありませんか? ご確認ください。

cow2010
質問者

お礼

早速アドバイスをいただきましてありがとうございます。 phpMyAdminは、お名前・COMのコントロールメニューから入りまして、メインメニューに以下の内容が表示された状態で使用しました。 (ログイン要求は特にありません。) -------------------------------------- localhost サーバのバージョン: 5.0.77 プロトコルバージョン: 10 サーバ: Localhost via UNIX socket ユーザ: root@localhost MySQL の文字セット: UTF-8 Unicode (utf8) MySQL の接続照合順序: utf8_unicode_ci -----------------------------------------

関連するQ&A