【php】fgetcsv()の基本作法
よくあるCSVファイルはShift_JISです。これをそのまま取り込むと失敗することがよくあります。
それは、fgetcsv()のせいではなく、使い方が悪いだけです。
失敗するのは主にダメ文字(2バイト目に5Cを含む文字)のせいなのですが、次のように書くだけで、とても快適なfgetcsv()生活を送ることができます。
fgetcsv()の基本作法
//これが重要な下準備 $fp = tmpfile(); fwrite($fp, mb_convert_encoding(file_get_contents('/path/to/csv.file'), 'UTF-8', 'sjis-win')); rewind($fp); //以降はごく普通の使い方 while ($line = fgetcsv($fp)) { //取得した$lineはUTF-8 //必要なら適宜文字コードを変換する var_dump($line); }
- 作った後にいちいち消すのが面倒なので、一時ファイルを活用(tmpfile())。
- UTF-8に変換する。SJISではなくて、sjis-winからUTF-8へ変換する。丸数字など機種依存文字が入る場合に大体対応できる。
- 書き込み後には、rewind()で忘れず巻き戻しを。
注意すること
こんなエスケープ文字がらみの問題がとても稀に発生する。データの絶妙な位置にバックスラッシュがあるときだけの問題。
残念ながら、この問題はphp5.3以降で指定できる第5引数を使わないと、おそらく対応できない。
松下 2010年10月8日 18:55
助かりました。ありがとうございます。
yoshimura 2010年10月8日 18:57
お役に立てましたら幸いです♪
m 2011年10月5日 15:54
快適で涙がでました!!
ありがとう!!
ありがとう!!