[PHP-users 32081] fgetcsv関数で日本語を含むCSVファイルが読み込めない

Takekatsu HIRAMURA hiratake55 @ gmail.com
2007年 5月 9日 (水) 10:33:23 JST


はじめまして、平村です。
fgetcsv関数に関して質問がありまして投稿します。

日本語で作成された以下のようなCSVファイルを配列に格納したいのですが、うまく取り込めません。

・test.csv
あ,い,う
か,き,く

・csvget.php
echo("<p>fgetcsv-test</p>\n");
echo($_ENV['LANG']);

$row = 1;
$handle = fopen("./test.csv", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
   $num = count($data);
   echo "<p> $num fields in line $row: <br /></p>\n";
   $row++;
   for ($c=0; $c < $num; $c++) {
       echo $data[$c] . "<br />\n";
   }
}
fclose($handle);

echo("</body>\n</html>\n")

・実行結果
fgetcsv-test

3 fields in line 1:




3 fields in line 2:




と、空白になります。

なお、test.csvを以下のようにダブルクオーテーションで括ると正常に読み込んでくれます。半角英数字のみのファイルも正常に動作します。
・test2.csv
"あ","い","う"
"か","き","く"


自分なりに検証したところ、$_ENV['LANG']=Cになっている点に問題があると思い、$_ENV['LANG']=ja_JP.UTF-8と設定されてあるサーバで確認したところ、ダブルクオーテーションなしでも正常に動作することを確認しました。

環境変数のLANGの値をja_JP.UTF-8に設定する方法、もしくは、下記環境でCSVを正常に読み込む方法をご教授願います。
PHP本体にはなるべく手を加えないで実現したいです。

・サーバ環境
CentOS 5
PHP 5.1.6

・文字コード
csvget.php: UTF-8
test.csv: UTF-8


--

Takekatsu HIRAMURA


PHP-users メーリングリストの案内