SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【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);
}

注意すること

こんなエスケープ文字がらみの問題がとても稀に発生する。データの絶妙な位置にバックスラッシュがあるときだけの問題。

残念ながら、この問題はphp5.3以降で指定できる第5引数を使わないと、おそらく対応できない。

関連するメモ

コメント(3)

松下 2010年10月8日 18:55

助かりました。ありがとうございます。

yoshimura 2010年10月8日 18:57

お役に立てましたら幸いです♪

m 2011年10月5日 15:54

快適で涙がでました!!
ありがとう!!
ありがとう!!