PHPで文字化けせずにCSVファイルを読み込む方法
CSVを読み込むと「文字化けしている…」ってことがよくありますよね。そんな時の対処法です。
文字化けせずにCSVファイルを読み込む
まず、SplFileObjectでCSVファイルを読み込みます。
fgetcsv()でもいいのですが、参考にさせて頂いた「【PHP】その CSV 変換、本当に「fgetcsv」でいいの?」によると、一番速くメモリの使用量も少ないのはSplFileObjectだそうなのでコレを使います。
また、エンコーディングは文字列ではないのでmb_convert_encoding()ではなく、mb_convert_variables()を使ってUTF8にエンコードします。
/**
* CSVから配列を作成する関数
*
* @param $csv string CSVファイルのパス
* @return $array array UTF8エンコード済の配列
*/
function csv_to_array($csv) {
$file = new SplFileObject($csv);
$file->setFlags(SplFileObject::READ_CSV);
$array = array();
foreach ($file as $line) {
//空行はスキップ
if (empty($line)) continue;
$array[] = $line;
}
mb_convert_variables("UTF-8", array("ASCII","JIS","UTF-8","EUC-JP","SJIS"), $array);
return $array;
}
こんな感じで読み込めます。
$data = csv_to_array("ファイル名.csv");