@River0051

Как сменить кодировку при чтении csv файла и преобразования в массив?

Исходный файл Data.csv в кодировке UTF-16 LE BOM, на сайте wordpress кодировка UTF-8 и при конвертировании его в массив, русские символы не корректно отображаются и так же не правильно обрезается строка через fgetcsv, если сменить кодировку у файла Data.csv на UTF-8 все отображается корректно, но это не вариант, файл предоставляется в кодировке UTF-16 LE BOM и его нельзя менять

Пробовал разные варианты смены кодировки при открытии файла через mb_convert_encoding и iconv, но не получилось, или русские буквы не корректно отображаются или строка не верно обрезается через fgetcsv, подскажите как правильно написать, ниже код

function csvToArray($csvFile){
		$file_to_read = fopen($csvFile, 'r');
		
		while (!feof($file_to_read) ) {
			$lines[] = fgetcsv($file_to_read);
		}
		fclose($file_to_read);
		return $lines;
	}
	
	//read the csv file into an array 
	$csvFile = 'Data.csv';
	$csv = csvToArray($csvFile);
	
	//render the array with print_r 
	echo '<pre>';
	print_r($csv);
	echo '</pre>';
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
i229194964
@i229194964
Веб разработчик
Вот пример кодировки
function csvToArray($csvFile){
    $file_to_read = fopen($csvFile, 'r');
    // Обработка BOM
    $bom = fread($file_to_read, 2);
    if ($bom === chr(0xff).chr(0xfe)) {
        // UTF-16LE BOM найден
        stream_filter_append($file_to_read, 'convert.iconv.utf-16le/utf-8');
    } else {
        // Нет BOM, считаем файл в текущей кодировке сервера
        rewind($file_to_read);
        stream_filter_append($file_to_read, 'convert.iconv.ISO-8859-1/UTF-8');
    }
    // Чтение CSV-файла
    $lines = array();
    while (!feof($file_to_read) ) {
      $lines[] = fgetcsv($file_to_read);
    }
    fclose($file_to_read);
    return $lines;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы