人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

php+mysqlで
CSVをMYSQLに取り込もうとしたのですが、文字化けをしてしまいます。
1.CSVファイル選択
2.アップロードして、fgetcsvでデータを読む
3.そのデータを insetinto(…)valus…
4.MYSQL登録する。

PHPはUTF-8で、CSVはsjisで改行は入っています。
文字化けを防ぐ方法として、何か対策を教えて欲しいです。
あと、2行目以降から読みたいのですがなにか方法があればあわせてお願いします。
while (($field = fgetcsv($fp)) !== FALSE) {
for ($i=0; $i<count($field); $i++){
if ($field[$i] == "" || NULL) {
$field[$i] = "''";
}else{
$field[$i] = "'" . $field[$i] . "'";
}
}
}
$sql = "insert into テーブル名 (フィールド名,フィールド名,フィールド名,フィールド名,フィールド名,フィールド名,フィールド名,フィールド名) values ('" . 取り込み日 . "',". $field[0] . ", " . $field[1] . ", ". $field[2] . ", " . $field[3] . ", ". $field[4] . ", ". $field[5] .", '". $upname ."')";
$re = mysql_query($sql) or die($sql . '<br />' . mysql_error() . '<br>');
echo mysql_affected_rows(). "行データを追加しました<br>";
}

●質問者: たつ
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tdoi
ベストアンサー

文字化けは、

1.ロケールをちゃんと考える

2.http://yossy.iimp.jp/wp/?p=56 を使う

のどっちかかなと。自信がなければ、2の方がよいでしょう。

2行目から読みたいなら、1行目を無視すればいいのでは?


追記:

何がどう全然分からないのか分かりませんが、fgetcsvの代わりにfgetcsv_regを使えばいいというだけですが。もちろん、fgetcsv_regの定義はコピーしておいてください。

PHPそのものが分からない方ですか?


更に追記:

PHP5以降のfgetcsv関数はシステムロケールに依存するため文字化けが発生する可能性があります。そのため、指定したURLの人がロケールに依存せずに正規表現をつかってfgetcsvと同等の処理を行うfgetcsv_reg関数を公開してくれています。

指定したURLには2つのコードブロックがあると思いますが、そこの部分はまるまるコピーしてください。その上で、あなたが書いたコードでfgetcsv_regを使ってください。もし単一のファイルでやるなら、こんな感じ。

<?php
while (($field = fgetcsv_reg($fp)) !== FALSE) {
 // あなたが書いたコード
}

function fgetcsv_reg (&$handle, $length = null, $d = ',', $e = '"') {
 // サイトからコピー
}
?>
◎質問者からの返答

回答ありがとうございます。

2.の方を閲覧したのですが、どこでどうしているのかが全然わかんなくて

INSERTをどこに入れたらいいのかわからないです。

追記:

PHP自体は分かります。

ただ、プログラミングの流れ全体がどう動いて、どういう処理をしているのかが解読できなくて

fgetcsv_regはただ単にいれればいいというわけではないですよね。

定義コピーとはどういうことでしょうか?

更に追記:

よくわかりました。丁寧な解説ありがとうございます。

ここからは自分でやってみます。

重ね重ねありがとうございます。


結果

やってみましたが、やはり文字化けが直らず、他の方法を試してみます。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ