При чтении csv, содержащего кириллицу, обычная функция fgetcsv опускает ее содержимое, одно из решений, использовать функцию fgetcsv2:
function fgetcsv2($f_handle, $length, $delimiter=';', $enclosure='"') { if (!strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') return fgetcsv($f_handle, $length, $delimiter, $enclosure); //если указатель на файл не задан, то возвращаем false if (!$f_handle || feof($f_handle)) return false; //если разделитель не задан, то возвращаем false if (strlen($delimiter) > 1) $delimiter = substr($delimiter, 0, 1); elseif (!strlen($delimiter)) return false; if (strlen($enclosure) > 1) // There _MAY_ be an enclosure $enclosure = substr($enclosure, 0, 1); $line = fgets($f_handle, $length); if (!$line) return false; $result = array(); $csv_fields = explode($delimiter, trim($line)); $csv_field_count = count($csv_fields); $encl_len = strlen($enclosure); for ($i = 0; $i < $csv_field_count; $i++) { if ($encl_len && $csv_fields[$i]{0} == $enclosure) $csv_fields[$i] = substr($csv_fields[$i], 1); if ($encl_len && $csv_fields[$i]{strlen($csv_fields[$i]) - 1} == $enclosure) $csv_fields[$i] = substr($csv_fields[$i], 0, strlen($csv_fields[$i]) - 1); $csv_fields[$i] = str_replace($enclosure . $enclosure, $enclosure, $csv_fields[$i]); $result[] = $csv_fields[$i]; } return $result; }