Справочники, инструменты, документация

PHP: Чтение из cvs файла кириллицы

В 99% случаев когда вы будете забирать данные из .csv файла где имеется записи на русском, вы получите знаки вопросиков. Для решение проблемы есть 2 способа, какой лучше выбирать вам. В коде будут комментарии, по этому вам не составит труда разобраться, и так первый вариант, в нем мы меняем кодировку перед выводом:
$handle = fopen("test.csv", "r"); // открывает файл на чтение

while (($data = fgetcsv($handle, 0, ";")) !== FALSE) { // получаем построчно в виде массива строку, не забывайте указать разделитель, он может быть отличаться от данного
  $arr[] = array_map(function($val) { // применяем array_map для обработки каждого элемента массива
    return iconv('CP1251', 'UTF-8', $val); // iconv меняет кодировку переданной строки
  }, $data);
}

fclose($handle);

Второй вариант меняет кодировку всего содержимого файла, а уже потом парсит его:

$handle = fopen('php://memory', 'w+'); // создает ресурс в пямяти
fwrite($handle, iconv('CP1251', 'UTF-8', file_get_contents('test.csv'))); // fwrite - записывает данные полученные из file_get_contents перед эти данным меняется кодировка с помощью iconv
rewind($handle); // ставим указатель в начало файла

while (($data = fgetcsv($handle, 0, ";")) !== FALSE) { // получаем построчно в виде массива строку, не забывайте указать разделитель, он может быть отличаться от данного
  $arr[] = $data;
}

fclose($handle);

В итоге в переменно $arr будет массив вот такой структуры:

array(21) {
 [0]=>
 array(29) {
  [0]=>
  string(14) "portfolio_name"
  [1]=>
  string(8) "lot_name"
 }
 [1]=>
 array(29) {
  [0]=>
  string(18) "Портфель 1"
  [1]=>
  string(1) "lot_name1"
 }
 [2]=>
 array(29) {
  [0]=>
  string(18) "Портфель 2"
  [1]=>
  string(1) "lot_name2"
 }
}