タグ:fgetcsv
fgetcsvのバグ
いまさらですが、PHP4ではまともに使用できていた「fgetcsv」関数。
PHP5になった途端不具合の嵐です。(サーバによるかもしれませんが。)
$csv = "/www/csv/test.csv";
$fl = fopen($csv, "r");
while($data = fgetcsv($fl, 10000)){
echo $data[0].":".$data[1];
}
としていると、カンマでの区切りがうまくいっていないのか、表示されなかったり、特定の文字で文字化けを起こしたりします。
こうなると、mb_convert_encodingで文字コードを調整しようとしてもうまくいきません。
ここはおとなしくfgetcsvをあきらめてfgetsとexplodeを使用しましょう。
$csv = "/www/csv/test.csv";
$fl = fopen($csv, "r");
while($data_fl = fgets($fl)){
$data_fl = rtrim($data_fl);
$data = explode(",", $data_fl);
echo $data[0].":".$data[1];
}
※rtrimは行の最後にある改行コードを取り除いてくれます。必要に応じて記述してください。自分はよく取り出したデータを条件分岐にかけることがあるので、改行コードの\r\nがあると不具合を起こすことがあります。
記述が少し長くなりますが、これで解決します。
nandani | 2010年07月18日 | コメント(0) | トラックバック(0) | PHP関連