問題
クライアントとサーバーの両方の文字コードを統一したはずなのに、PHPからデータベースの中身を取り出すと文字化けして「?」」になる。
原因
ネットで調べてみたら、両方の文字コードを揃えていても、PHPのビルド時に設定された文字コードが適用されてしまう場合があるらしい。デフォルトだとlatin1(欧文フォント)みたい。
対策
PHPからデータベースに接続したときに、文字コードの設定をしてあげる。MySQLの設定ファイルをいじる方法もあるらしいんですが、レンタルサーバーだとできないので
結局どうすればいいかというと、データベースに接続した時に
mysql_set_charset(“utf8” , $db);
を書いて文字コードを指定してあげると文字化けしなくなりました。(これはutf8の場合)
<?php
$db=mysql_connect(“データベース”,”ユーザーネーム”,”パスワード”);
mysql_set_charset(“utf8” , $db);
?>
こんな感じです。
「set names」を使う方法も見かけましたが、これだとセキュリティーに問題があるらしいです。