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

久光 一誠 ds1i-hsmt @ asahi-net.or.jp
2010年 11月 23日 (火) 22:26:37 JST


久光と申します。



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 メーリングリストの案内