Неверная кодировка при экспорте из БД в Excel
<?php
header("Content-Disposition: attachment; filename=price.xls");
header ( "Content-type: application/vnd.ms-excel;charset=windows-1251;" );
$conn = new mysqli('localhost', 'mysql', 'mysql');
mysqli_select_db($conn, 'mybase');
$sql = "SELECT * FROM `mytable`";
$setRec = mysqli_query($conn, $sql);
$columnHeader = '';
$columnHeader = "id" . "\t" . "Наименование" . "\t" . "Описание" . "\t";
$setData = '';
while ($rec = mysqli_fetch_row($setRec)) {
$rowData = '';
foreach ($rec as $value) {
$value = '"' . $value . '"' . "\t";
$rowData .= $value;
}
$setData .= trim($rowData) . "\n";
}
echo ucwords($columnHeader) . "\n" . $setData . "\n";
?>
Всё равно выводит кракозябры.
Я делал mysqli_set_charset( $link, 'cp1251');
Из БД выводит нормально, но заголовки всё равно кракозябры.
Ответы (1 шт):
Если у Вас только заголовки не выводит нормально, то попробуйте кодировку строки с заголовками преобразовать:
$columnHeader = mb_convert_encoding($columnHeader, "UTF-8");
Или так:
$columnHeader = mb_convert_encoding($columnHeader, "UTF-8",mb_detect_encoding($columnHeader));
Кроме этого в header поставить UTF-8, чтобы в дальнейшем ошибок не возникало. Если это не поможет проверьте кодировку самого файла в котором написан этот код. Иногда бывает, что файл в той кодировке, которая не поддерживает русские буквы, и хоть они отображаются нормально в редакторе, на самом деле получаем проблему.