У меня есть файл .CSV в кодировке UTF-16. Разделитель полей — это запятая (,), а разделитель строк — двойные кавычки («). Изменение кодировки вне PHP не вариант. Мне нужно превратить его в ассоциативный массив с PHP. Но я не могу получить это признать, что кодировка UTF-16.
Вот мое содержимое файла для numbers.csv:
"Phone number""+1 55500718""+1 55551919"
Я успешно загрузил файл, как это (используя фреймворк Laravel)
$file = $request->file('numbers-file');
$filename = $file->getPathName();
У меня также есть пользовательская функция csvToAssocArray (), которая превращает ее в ассоциативный массив. Я использую mb_convert_encoding для преобразования UTF-16 в UTF-8.
function csvToAssocArray($filename) {
$csvAsArray = array_map(function($data) {
return str_getcsv(mb_convert_encoding($data, 'UTF-8', 'UTF-16'), ",");
}, file($filename));
$header = array_shift($csvAsArray);
$csv = array();
foreach ($csvAsArray as $row) {
$csv[] = array_combine($header, $row);
}
return $csv;
}
Но конечный результат print_r (csvToAssocArray ($ имя_файла)) выглядит так:
array:3 [▼
0 => array:1 [▼
"∀倀栀漀渀攀 渀甀洀戀攀爀∀" => "+1 55500718"]
1 => array:1 [▼
"∀倀栀漀渀攀 渀甀洀戀攀爀∀" => "+1 55551919"]
]
Задача ещё не решена.
Других решений пока нет …