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

これで問題なく動き始めました。
コメントの書き込み
コメント
2018年01月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
先月
来月
カテゴリ
検索
関連サイト
プロフィール
【ネットネーム】
みゅー

キャラクター by ツカエルサイト


【趣味】
・プログラミング
・写真
・楽器演奏
・手芸
・日曜大工
・家の中の不便を便利に
・考える
・自然科学
・猫と戯れる
・ジグソーパズル

【仕事】
・派遣社員でSE・PGやっていました。次の良い仕事がみつからないので、ビジネスへ注力しようと思っています。
・経験言語:VB6、VB.NET、PHP、Perl、JAVA、Oracle、SQLServer、PostgreSQL



【名前】
アン(足)

2014年4月22日生まれ 女の子
あだ名は くノ一
普段は普通にしゃべりますが、興奮すると『ニャ』を連発します

【趣味】
・狩
・ご飯を食べる
・ママのお手伝い

【仕事】
ママのビジネスの看板招き猫
ママの代わりにPC入力
仕事中のママの右腕を温める
ママに心配をかける
いろんな事をしでかしてママを退屈させない

RSSフィード