【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になっていることが結構あるので、運がよいと、省略しても割とうまくいく。
まさお 2013年4月17日 12:02
役立ちました!このままつかえました♪