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