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

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

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

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

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

●質問者: gwrite
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● zebevogue
●49ポイント ベストアンサー

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

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

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


gwriteさんのコメント
データは、PHPのコードからインサート等で登録したものです。 ファイルでのやりとりはしていませんでした。 で、調べた結果、 MySQL の文字セット: UTF-8 Unicode (utf8)はレンタルサーバなので変えようがない。 その他の設定は、EUC-JPで統一されている。 で、なにがおかしいかというと、よくわからなかったのですが、 レンタルサーバーだと如何ともしがたい状況だという検索結果がありました。 で、対応策として、 すべての接続時に、PHPコード側で、 『SET NAMES ujis』というクエリを発行すると回避できるとあり、 やってみたところ、うまくいきました。(全部は試してないですが) が、これは非常に面倒です。 他の方法がないか、という回答を期待しています。 もしくは、有識者の方による、それしか方法はないよという太鼓判があれば あきらめがつきます。

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

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

2 ● jirepo
●50ポイント

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で書くことをお勧めします。


gwriteさんのコメント
ありがとうございます。 そうですか、、、昨今はutf-8が主流ですか。。。 勉強用に買った本にはEUCが良いと書かれてたので、それにしたがってました。 たしかに古い本でした。

3 ● 暇人
●1ポイント

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

関連質問

●質問をもっと探す●



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