日本語でもひらがな『あああ』とかはちゃんと入るし、
漢字で『文字化け』とDBに登録してWEBページに表示させると『文???け』みたいな中途半端な化け方です。
PHPはEUC-JPで書いてます。
レンタルサーバーでやっていて、初心者なので、phpmyadminでDB作ってやってます。
phpmyadmin上では該当データは『????????????????????????』のようにまったく表示されません。
以前別のサーバーでやっていた時は、特に設定とかしなくても、同じPHPファイルで正常に
動作していたのですが。。。。
どういったところを見直せばよいか、お心当たりのある方、ご教授お願いします。
まずは全てのエンコードを揃えてはいかがでしょう。
もし、データをMySQLにphpMyAdminでインポートしたのでしたら、
エクスポートしたファイルも揃えて入れ直してください。
多分壊れたデータがテーブルに入ってます。
まずは全てのエンコードを揃えてはいかがでしょう。
もし、データをMySQLにphpMyAdminでインポートしたのでしたら、
エクスポートしたファイルも揃えて入れ直してください。
多分壊れたデータがテーブルに入ってます。
下の方に概ね同意です。
ですが、SET NAMESは使わない方が良いですよ。
http://kennyqi.com/archives/61.html
http://nonn-et-twk.net/twk/why-set-names-in-php-is-bad
ありがとうございます。
とりあえず、2つめに紹介していただいたとこに書いてある、
mysqli_set_charsetの使用を検討します。
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で書くことをお勧めします。
ありがとうございます。
そうですか、、、昨今はutf-8が主流ですか。。。
勉強用に買った本にはEUCが良いと書かれてたので、それにしたがってました。
たしかに古い本でした。
下の方に概ね同意です。
2012/07/20 06:13:12ですが、SET NAMESは使わない方が良いですよ。
http://kennyqi.com/archives/61.html
http://nonn-et-twk.net/twk/why-set-names-in-php-is-bad
ありがとうございます。
2012/07/20 11:41:02とりあえず、2つめに紹介していただいたとこに書いてある、
mysqli_set_charsetの使用を検討します。