PHP→MySQLでの文字化けについて



PHP→MySQLでデータを追加登録したところ、その間で文字化けが起こっているようで、phpmyadminで確認したところ、文字が化けています。どうしたらよいでしょうか?一応以下のように文字の処理をしているのでPHPのMySQLに挿入する直前まで文字列に問題はないようです。

$name1 = htmlspecialchars(stripcslashes($name1));
$name1 = mb_convert_kana($name1, "KV", "utf-8");
$name1 = str_replace("<br />", "", $name1);

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2007/01/23 23:16:28
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:vector_xenon No.1

回答回数113ベストアンサー獲得回数4

ポイント23pt

1.mb関数のデフォルトエンコーディングと、データを挿入するところの文字エンコードは同じですか?

2.MySQL側はutf-8なのですか?


1であればmb_convert_encoding()で正しく何から何への変換なのか指定するか、mb_enternal_encoding()で元データの文字エンコードにセットしてください。


2であれば正しく文字コードをセットしてください。



また、最後に

$name1 = str_replace("<br />", "", $name1);

としていますが、htmlspecialchars()にて<>が変換されているので、

$name1 = str_replace("&lt;br /&gt;", "", $name1);

としないと取り除くことができないかと思われます。

id:wakannaidesu

1.2.共によくわかりません。

初心者なもので…1はどのタイミングでそれを使うのでしょうか?登録後、データ取得するタイミングなのですよね?

2はphpmyadminの使い方がいまいちわからないので、どこで設定していいのかわかりません。

2007/01/22 21:09:49
id:ctrl-v No.2

回答回数289ベストアンサー獲得回数15

ポイント22pt

http://wota.jp/ac/?date=20061011#p01

こちらのエントリーを参考に、MySQL側の文字コードをutf8に設定してください。

id:falcosapiens No.3

回答回数126ベストアンサー獲得回数13

ポイント20pt

公式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の設定文字コードを調べるべきですが・・・。

id:vector_xenon No.4

回答回数113ベストアンサー獲得回数4

ポイント25pt

初心者なもので…1はどのタイミングでそれを使うのでしょうか?登録後、データ取得するタイミングなのですよね?

DBにデータを登録する際に行います。

データを取得する際には、元の文字コードに戻す必要があるかと思います。(ページもMySQLも文字コードがEUC-JPであれば必要ありません)


phpMyAdmin上でデータを挿入してみて、そのデータをphpMyAdminで正しく表示されている時に、右クリックから文字エンコードを見ればそれがMySQL側の文字コードです。


1が分からないのであれば、mb_internal_encoding()を使って、表示しているページの文字コードに合わせておけば良いかと思います。

本当はどちらもキチンと調べるべきですが。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません