PHP→MySQLでデータを追加登録したところ、その間で文字化けが起こっているようで、phpmyadminで確認したところ、文字が化けています。どうしたらよいでしょうか?一応以下のように文字の処理をしているのでPHPのMySQLに挿入する直前まで文字列に問題はないようです。
$name1 = htmlspecialchars(stripcslashes($name1));
$name1 = mb_convert_kana($name1, "KV", "utf-8");
$name1 = str_replace("<br />", "", $name1);
1.mb関数のデフォルトエンコーディングと、データを挿入するところの文字エンコードは同じですか?
2.MySQL側はutf-8なのですか?
1であればmb_convert_encoding()で正しく何から何への変換なのか指定するか、mb_enternal_encoding()で元データの文字エンコードにセットしてください。
2であれば正しく文字コードをセットしてください。
また、最後に
$name1 = str_replace("<br />", "", $name1);
としていますが、htmlspecialchars()にて<>が変換されているので、
$name1 = str_replace("<br />", "", $name1);
としないと取り除くことができないかと思われます。
公式FAQに入れても良いくらいの頻出質問ですね。
まず,
$name1 = str_replace("
", "", $name1);
ですが,これは最初に実行してくださいね。
1の方が答えている通り,正しく置き換えられませんので。
問題のSQLの方ですが,
SQLでinsert文を発行する際に,まず set namesをしてください。
~
mysql_query("SET NAMES utf8");
mysql_query("INSERT INTO・・・");
~
データが正しくutf-8になっており
かつ,mysqlの設定もutf-8になっていれば,
これで正常に動作するはずです。
うまくいかなければ,どこかで文字コードがずれていますから
set namesの中身を ujisにしてみたりするなどして実験してください。
http://phpspot.net/php/pgMySQL4.1%8CnUTF-8%82%CC%8F%EA%8D%87.htm...
※本当は設定ファイルを探してsqlの設定文字コードを調べるべきですが・・・。
初心者なもので…1はどのタイミングでそれを使うのでしょうか?登録後、データ取得するタイミングなのですよね?
DBにデータを登録する際に行います。
データを取得する際には、元の文字コードに戻す必要があるかと思います。(ページもMySQLも文字コードがEUC-JPであれば必要ありません)
phpMyAdmin上でデータを挿入してみて、そのデータをphpMyAdminで正しく表示されている時に、右クリックから文字エンコードを見ればそれがMySQL側の文字コードです。
1が分からないのであれば、mb_internal_encoding()を使って、表示しているページの文字コードに合わせておけば良いかと思います。
本当はどちらもキチンと調べるべきですが。
1.2.共によくわかりません。
初心者なもので…1はどのタイミングでそれを使うのでしょうか?登録後、データ取得するタイミングなのですよね?
2はphpmyadminの使い方がいまいちわからないので、どこで設定していいのかわかりません。