Неверная кодировка при экспорте из БД в 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 шт):

Автор решения: Pashok

Если у Вас только заголовки не выводит нормально, то попробуйте кодировку строки с заголовками преобразовать:

$columnHeader = mb_convert_encoding($columnHeader, "UTF-8");

Или так:

$columnHeader = mb_convert_encoding($columnHeader, "UTF-8",mb_detect_encoding($columnHeader));

Кроме этого в header поставить UTF-8, чтобы в дальнейшем ошибок не возникало. Если это не поможет проверьте кодировку самого файла в котором написан этот код. Иногда бывает, что файл в той кодировке, которая не поддерживает русские буквы, и хоть они отображаются нормально в редакторе, на самом деле получаем проблему.

→ Ссылка