- 2007年5月23日 19:31
- PHP
カンマ区切りのCSVファイルをアップロードし、fgetcsv() を使って解析するスクリプトを組んでいたら色々なことではまってしまった。
そのエラー内容と、対処法。
おこった現象
- 文字コードShift_JISで、文字列に「機能」が入っているとそこで区切られてしまう
これは「能」の2バイト目が「2c」でエスケープしたと判断されてしまうのが原因。Shift_JISを使っているとよく会うトラブル。普段ならこういったトラブルを避けるためにShift_JISは使わないのだが、一般のユーザが利用するシステムなので文字コードのことを意識させないようにしたら、はまってしまった。
こうやって対処した
結論から書くと、アップロードしたCSVファイルをEUC-JPに変換し一時ファイルとして保存。そして、fgetcsv() を使ってデータを区切った。
どうも昔から fgetcsv() にはトラブルにあうなぁ。
- [PHP-dev 963]fgetcsv仕様変更について (was fgetcsvてゆーか、ファイル入出力の...)
- [PHP-dev 952]Signal11で落ちる(php-src/ext/standard/file.c 1.279.2.42)
当時、ここら辺の流れを追っていたから fgetcsv() を使わないようにして、タブ区切りファイルで対応していたのだけど、やっぱり一般的なCSVファイルにきちんと対応していないとダメだね。
Windows ExcelのCSVフォーマットが一般的か…というと微妙だが。
- Newer: FreeBSDのソースの中に書かれているローエンドNICについて
- Older: 大容量データを転送させるには
Comments:0
Trackbacks:0
- TrackBack URL for this entry
- http://blog.tofu-kun.org/mt-tb.cgi/324
- Listed below are links to weblogs that reference
- PHPでCSVファイル読み込みでエラー from Webプログラマー+WebデザイナーなZARU日記
