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.ロケールをちゃんと考える
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 = '"') { // サイトからコピー } ?>