みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

CSVデータ読込だら・・・1文字目のみ文字化け

PHP4.xxでSQLIte3で行っています。

名簿をCSVデータで一気にDBにインサートしたいのですが・・・
なぜか名前の1~2文字目あたりのみ文字化けします。

色々試行錯誤していますが・・・
糸口が見つからなくて・・・

どなかたかご教授して頂けませんか?!
文字化け具合(というよりアルファベットに変わってる)が画像を参照してください。

CSVデータでは、山崎まさよし、abc、岡田てるお
となっています。

ちなみにコードはこのような形です。

--------------------------------------------------------
$updir = "./csv/";
$save_name = "list.csv";

if (is_uploaded_file($_FILES["csv"]["tmp_name"])) {

if (move_uploaded_file($_FILES["csv"]["tmp_name"], $updir.$save_name)) {
chmod($updir.$save_name, 0644);
echo "<br />CSVファイルをアップロードしました。";


// CSVの各内容をインサート
$row = 1;
$handle = fopen($updir.$save_name, "r");

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$insert = "insert into list values (";
$insert_row = "";
$row++;

for ($c=0; $c < $num; $c++) {
$data[$c] = mb_convert_encoding($data[$c], "EUC-JP", "SJIS");
$insert_row .= "'".$data[$c]. "',\n";

}

$insert_query = $insert.$insert_row;

$insert_query = substr($insert_query, 0, (strlen($insert_query)-2) );
$insert_query .= ")";

if(sqlite_query($insert_query, $conn)){

} else {
echo "<br>配信先情報の追加を失敗しました。";
}

}
}
}

fclose($handle);
--------------------------------------------------------

投稿日時 - 2009-05-22 00:55:39

QNo.4979504

すぐに回答ほしいです

質問者が選んだベストアンサー

EUC-JPで保存しようとしていますね。
SQLiteはUTF-8で保存した方がいいので、

$data[$c] = mb_convert_encoding($data[$c], "UTF-8", "SJIS");

とします。

読み込みはEUC-JPで行っているようですから、出力時に
$data = mb_convert_encoding($data, "EUC-JP", "UTF-8");
でEUCに戻すか、プロジェクト全体の文字コードをUTF-8にしましょう。

まだ、書き始めだと思うので、プロジェクト全体をUTF-8に
することをお勧めします。

投稿日時 - 2009-05-22 09:53:06

お礼

ありがとうございました!

とても参考になりました。

投稿日時 - 2009-06-07 22:13:48

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問