Чтение файлов csv

PHP
Итак, стоит задача "Считать содержимое из csv-файла и импортировать данные в базу к кодировкой utf-8".

В php есть функция fgetcsv для чтения строк из csv-файла. Но по каким-то причинам данная функция работает некорректно и приведенный ниже код не возвращает нужные нам данные. Там где должен быть русский текст просто пусто.
$file = '/home/www/file.csv';
$handle = fopen($file, "r");
while (($data = fgetсsv($handle, 0, ";")) !== false) {
    // вставляем данные в базу данных
}


По этой причине лучше использовать функцию fgets, которая просто считывает строку из файла и производить разбор данных вручную.
$file = '/home/www/file.csv';
$handle = fopen($file, "r");
while (($data = fgets($handle, 4096)) !== false) {
    $data = explode(';', $data);
    // вставляем данные в базу данных
}

Теперь у нас есть все необходимые данные, осталось лишь поправить кодировку и превратить ����� в русские символы.

Большинство cvs-файлов создаются с помощью MS Excel. По умолчанию эти файлы создаются с кодировкой ASCII. Напишем функцию, которая будет производить конвертацию текста при необходимости в формат utf-8.
function toUtf8($str) {
    if (mb_check_encoding($str, 'UTF-8')) return $str;
    else { 
        $st2 = iconv('cp1251','utf-8',$str); 
        if (mb_check_encoding($st2, 'UTF-8')) return $st2;   
    }   
    return $str;  
  }

С учетом созданной функции toUtf8 у нас получился следующий код
$file = '/home/www/file.csv';
$handle = fopen($file, "r");
while (($data = fgets($handle, 4096)) !== false) {
    $data = explode(';', $data);
    foreach($data as $k => $v) {
        $data[$k] = toUtf8($data[$k]]);
    }
    // вставляем данные в базу данных
}
Понравился пост? Поделись с друзьями:

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.