- ベストアンサー
(mysql_set_charset)PHPでINSERTした時の文字化け
- MySQLの文字セットをUTF-8で設定することで文字化けを防ぐことができます。
- mysql_set_charset()関数を使用することで、MySQLへの接続時に文字セットを指定することができます。
- また、PHPからINSERTする際にはmb_convert_encoding()関数を使用して文字エンコーディングを変換する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すでにUTFで環境を構築されているならミドルウェア側で変換することをお勧めします。 多言語コードで格納されていると検索する際にヒットしなくなります。 また、SJISはインジェクションの問題が完全には対応できないためお勧めしません。 どうしてもというのであれば検索性をすててバイナリとしてデータを格納するだけを 目指すのも手かもしれません
その他の回答 (1)
- hogehoge78
- ベストアンサー率80% (433/539)
とりあえずまず、日本語もUTF-8で作成して、全部統一させることをおすすめします。 日本語だからといって、SJISにする理由はとくに無いと思います。 何か特殊な事情があるなら、データベースに挿入する前にmb_convert_encoding関数でSJISをUTF-8に変換してください。 尚、正確には、SJISではなくてsjis-winで。 <?php $value = mb_convert_encoding($value, 'utf-8', 'sjis-win');//sjis-winは括弧株とか特殊な文字も変換できる。 ?> その上で、MySQLで作成したデータベースと、PHPの文字コードの他に、Mysqlの設定ファイルに書いてある(または書いてなくてデフォルトで決まっている)文字コードの存在があります。 その設定ファイルに記述されている文字コードが正しく、utf8になっていなければ、文字化けが起きます。 それをスクリプト(クライアント)側から決めてやるのが、mysql_set_charsetになります。 ですので、 <?php mysql_set_charset('utf8', $link); ?> としてやるのが正解。 のはずです。 一度試してみてください。 尚、私は、 http://www.klab.jp/media/mysql/index6.html こちらのサイトを参考に致しました。 勉強を進めていくうちにきっと必要な文書となると思いますので、ブックマークしておくと良いかもしれません。
補足
お早い返答有難う御座います。 またお伺いしたいのですが、 >すでにUTFで環境を構築されているなら・・・ とありますが、まだ始めたばかりですのでもし多言語に対応する環境があるのであれば お教え頂ければそちらに切り替えようと思います。 その方が楽なのでorz またミドルウェア側と言うのが少し私には難しいのですが(涙 http://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%89%E3%83%AB%E3%82%A6%E3%82%A7%E3%82%A2 等、少し調べてみましたが 有力な情報があるサイトがありましたらご誘導お願いできませんでしょうか?(涙 厚かましいお願いで申し訳御座いません・・・