SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【php】fgetcsv()の基本作法 (Ver.2)

問題

Excelで作ったCSVをfgetcsv()したいが、うまくいかない。

答え

細かい話はこちら 【php】fgetcsv()はロケールの設定に依存する

//ロケールを指定する
setlocale(LC_ALL, 'ja_JP.UTF-8');

//文字コードをロケールに合わせて変える
$fp = tmpfile();
fwrite($fp, mb_convert_encoding(file_get_contents('/path/to/excel.csv'), 'UTF-8', 'sjis-win'));
rewind($fp);

//この後は通常通りの処理
while ($line = fgetcsv($fp)) {
    var_dump($line);
}

ポイントは次のとおり。

1、ロケールを指定する。OSのロケールを設定してもよいが、phpのsetlocale()でよい。通常、ロケールの設定にja_JP.sjisがないので、UTF-8かEUC-JPの都合のいい方で。

2、ファイルの文字コードを1に合わせる。

3、fgetcsv()を使いたいので一時ファイル(tmpfile())を活用する。

ロケールの指定を省略しても、デフォルトのロケールがja_JP.UTF-8になっていることが結構あるので、運がよいと、省略しても割とうまくいく

関連するメモ

コメント(1)

まさお 2013年4月17日 12:02

役立ちました!このままつかえました♪