CentOS+php+MySQL+apache 「データベースのデータは正しいのにブラウザに表示すると文字化けする」を解決する

CentOS+php+MySQL+apache 「データベースのデータは正しいのにブラウザに表示すると文字化けする」を解決する
MySQLに蓄積した内容を、phpでホームページに表示する仕組みにしているのだが、データが文字化けしてしまう。
使用している文字セットは、UTF8 極力文字セットはこれで統一している。
phpで生成しているhtmlはutf8でまちがいない。
直接書いている文字は正しく表示される。
データベース内をphpMyadminなどで参照しても正しく記録されている。(DB内もUTF8で記録)
何処で文字化け?
どうもデータの出入りをコントロールしているMySQLのシステム設定あたりに問題があるようだ。
しかしこう複数のモジュールが絡んでくると原因追求が難しいよね。
紆余曲折たどり着いたのが、my.cnfのでの設定。
すぐに忘れてしまいそうなのでここにメモっておきます。
[mysqld] に以下の2行を追加した。
default-character-set=utf8
skip-character-set-client-handshake

デフォルトのキャラクタをUTF8とし、キャラクタセットのハンドシェイクをスキップする?
ようするにそのまま引き渡すってことでしょ。
結果としてutf8の文字をそのまま渡すので正しく表示されるということですね。
但しこの方法は、場合によっては安全性に問題があるようです。
変換という工程を通過させることによって安全な文字列のみを通過させていたわけですが、
それをスキップさせてしまうわけです。
とはいえ、1から再設定というわけにもいかず、直面している問題を早急に解決しなければならないような場合には、極めて即効性のある解決方法だったりするのです。

コメント

タイトルとURLをコピーしました