Начальные условия:
1. База данных в utf8_general_ci
2. Выполняется некоторый запрос, возвращается массив.
Если без обработки выгрузить данные в csv следующими командами:
$fp = fopen('/var/project/documents/file.csv', 'wb');
fputcsv($fp, $title, ';', '"');
foreach($data as $res){
fputcsv($fp, $res, ';', ' ');
}
fclose($fp);
enca вернёт мне следующее
$ enca -g file.csv
Universal transformation format 8 bits; UTF-8
Doubly-encoded to UTF-8 from CP1251
А вот если добавить следующую обработку:
foreach($data as $k => $rec){
foreach($rec as $key => $value){
$data[$k][$key] = mb_convert_encoding($value, "Windows-1251", "UTF-8");
}
}
и снова экспортировать файл в csv enca вернёт следующий ответ:
7bit ASCII characters
либо
KOI8-R Cyrillic
Surrounded by/intermixed with non-text data
Файл должна принять 1С, что она собственно сделать не может.
enca должна возвращать MS-Windows code page 1251
Пытался модифицировать .htaccess чтобы подменить кодировку.
Файл отдаётся вот так:
header('Content-type: text/csv;');
header("Content-Disposition: attachment;filename=file.csv'");
header('Cache-Control: must-revalidate');
header('Content-Length: ' . filesize($file));
}
readfile($file);
Пробовал настраивать их - файл всё равно отдаётся не так как нужно.
Что ещё можно делать?