2010/03/01 23:59 / Category php
よくあるCSVファイルはShift_JISです。これをそのまま取り込むと失敗することがよくあります。
それは、fgetcsv()のせいではなく、使い方が悪いだけです。
失敗するのは主にダメ文字(2バイト目に5Cを含む文字)のせいなのですが、次のように書くだけで、とても快適な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引数を使わないと、おそらく対応できない。
システム開発 ソフテルのブログ
no comments
RSS / trackback