PHPのマニュアルにもありますが、
$row = 1;http://php.net/manual/ja/function.fgetcsv.php
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
こんな感じでCSVを読み出していくと思うのですが、Excelで書き出したCSVが以下みたいな感じだったとき、
ヘッダ1,ヘッダ2,日付,項目
ほげほげ,だよだよ,2011/10/25,ああああああ
コレがなぜか一文字目が文字化けしてしまう!
まずは文字コード(SJIS,SJIS-win,UTF-8の組み合わせ)を疑ってみたものの解決せず。
ほげほげ→wげほげみたいな形で表示されちゃうんですよ。
CSVの文字コードはSJIS、プログラムはUTF-8。んー。CSVを以下に変更。
"ほげほげ","だよだよ","2011/10/25","ああああああ"
ダブルコーテーションで囲ってみたところ・・・
ほげほげきちんと表示されるようになりました。SJISのCSVの場合、そのまま読み出してmb_convert_encodingでechoしてもうまくいかない模様。EUCもだめっぽいようで、fgetcsvでうまく使えるのはUTF-8の時だけのようだ。
・ダブルコーテーションで囲む。
または
・SJISで保存しない、UTF-8で保存。
が解決のポイントかも。意外に基礎っぽいところで躓きます。
0 件のコメント:
コメントを投稿