PHPコーディング

fgetcsv関数の不思議

2010年06月03日
作成したツールで文字化けが起こっているとの連絡を受けました。
私が契約しているサーバーでは、全く問題なく動作しています。

色々調べると、あるサーバーでその現象が起こっていることがわかりました。
さらに詳しく調べると、【fgetcsv】関数がファイルから文字を読み込む際、文字化けを起こしていることがわかりました。

ネットで調べると、この問題に引っかかっている方もたくさんいらっしゃるようです。
あちこちに書き込みがあります。

そうやら、PHPのバージョンアップの際、関数の仕様が変更になったようです。
こういう基本的な関数の仕様を変更されると、痛いです。

しかし、更に調べると、更にバージョンの高いPHPではこの現象は起こっていません。
ということは、仕様がまた変更になったということのようです。
要は特定のバージョンのPHPでのみ起こる現象、ということです。

csvで囲み文字を使っている場合、問題なく動作するようです。

でも、csvの本来の形式って確か、項目の値を囲まないはずでは???

回避方法としては、ファイルからはシンプルに文字列を読み込んで、あとは自分で処理すればいいようです。

前からいつか書き直そうと思っていた部分なので、ついでに書き直します。

正規表現を使う方法や、ファイル全体をそのまま読み込む方法もありますが、私が取った方法です。

【fgets】関数で、ファイルを1行ずつ読み込み。
改行文字列を削除。
区切り文字列で分割。

です。
今回は囲み文字列はないので、飛ばします。区切り文字列がタブの場合です。

while (($line = fgets($handle)) !== false) {
 $line = str_replace("\n", "", $line);
 $line = str_replace("\r", "", $line);
 $csv_data = explode("\t", $line);
}

これで問題なく動き始めました。
コメントの書き込み
コメント