2010年11月23日

[PHP-users 35426]fgetcsvで先頭が全角英数記号のデータ取込み

久光と申します。

csvファイルをUTF-8に変換してfgetcsv関数を使って取り込もうと思って下記のスクリプトを作りました。

$buf = mb_convert_encoding(file_get_contents($uploadFile), 'UTF-8', 'SJIS-win');
$handle = tmpfile();

fwrite($handle, $buf);
rewind($handle);
while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
// 取り込み処理
}


おおむねうまく動いているのですが、たとえば下記のようなデータの先頭文字が全角英数記号の場合にその先頭の1文字だけが文字化けを起こします。

51,100040,1,3−ブチレングリコール,0.0003
31,108638,L−アスコルビン酸ナトリウム,0.1
51,521164,(ヒマシ油/IPID)コポリマー,2

「1」「L」「(」が文字化けしてしまいます。

"1,3−ブチレングリコール"のようにデータをダブルクォーテーションで囲んでおけば文字化けせずに取込みできますが、利用者はEXCELでcsvファイルを作成するので上述のデータの場合はダブルクォーテーションでデータを囲んでくれません。とりあえずEXCELでcsvファイルを作成した後、ワードパッドなどで該当データをダブルクォーテーションで囲んでもらう作業をしてもらってますが、先頭が全角英数記号でも問題なく取り込むにはどこを修正したらいいでしょうか。

IIS 7.0
PHP 5.3.3

_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年11月23日 22:26
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/100288
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。