php header excel и utf-8

ob_start(); echo 'Désçàui'; header("Content-Type: application/vnd.ms-excel; charset=utf-8"); header("Content-type: application/x-msexcel; charset=utf-8"); header("Content-Disposition: attachment; filename=Test.xls"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); ob_end_flush(); 

То, что я получаю в файле excel, – Désçà ui

Тем не менее, я получаю Désçàui, когда я пытаюсь

 ob_start(); echo 'Désçàui'; header("Content-Type: text/html; charset=utf-8"); ob_end_flush(); 

Любые специалисты по оказанию помощи?

PS. Файл сохраняется в DW с типом / кодировкой Unicode (Utf-8).

Я не уверен, но может быть, что excel не может обрабатывать utf8 (может зависеть от версии). Но он может работать с utf16, поэтому попробуйте преобразовать кодировку. Это работает для меня (в excel2002):

 echo mb_convert_encoding('Désçàui','utf-16','utf-8'); 

Источник http://www.mwasif.com/2007/5/download-data-csv-using-php/

Решение помогло мне

Датский Захур сказал:

7 октября 2009 года, 7:23 вечера

Если ваше содержимое находится в формате UTF-8, то нет необходимости конвертировать кодировку. Просто запустите свой файловый / выходной поток с помощью спецификации UTF-8 после заголовков.

echo pack("CCC",0xef,0xbb,0xbf);

И заголовок должен содержать кодировку UTF-8

header( "Content-type: application/vnd.ms-excel; charset=UTF-8" );

Он будет работать как шарм, потому что Excel распознает кодировку файлов с байтами спецификации.

Я не знаю, как вы создаете файл excel. Но, если вы делаете это из HTML-вывода, вы можете просто добавить следующее в начале:

<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />

С уважением

Эта строка кода UTF-8 BOM сделала мои символы UTF-8 прекрасными:

  header("Content-type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename='".$file_name."'"); header("Pragma: no-cache"); header("Expires: 0"); echo "\xEF\xBB\xBF"; //UTF-8 BOM echo $out; 

Заголовки content-type имеют отношение только к браузере. Они не влияют на загруженные файлы. После сохранения файла приложение может решить, как он обрабатывает данные в файле.

Пример, который вы показываете, не является действительным файлом Excel в первую очередь. Когда вы сталкиваетесь с тем, что, по его мнению, является сломанным файлом, Excel, вероятно, переключается на некоторую обработку по умолчанию, которая предполагает использование windows-1252 или другого однобайтового набора символов.

Вам нужно будет открыть Excel для открытия файла. В качестве альтернативы можно использовать старый трюк «Выход HTML, но сохранить как XLS» и указать кодировку UTF-8 в этом HTML-файле.

Преобразование utf8 в html-сущности отлично работало для меня:

 $str = 'utf-string ...'; if (mb_detect_encoding($str ) == 'UTF-8') { $str = mb_convert_encoding($str , "HTML-ENTITIES", "UTF-8"); } header('Content-type: application/x-msdownload; charset=utf-16'); header('Content-Disposition: attachment; filename=companies.xls'); header('Pragma: no-cache'); header('Expires: 0'); echo $str ; 

попробуй это

 <?php header("Content-Type: application/vnd.ms-excel"); header('Content-Disposition: attachment; filename="sample.xls"'); echo " <html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\"> <html> <head><meta http-equiv=\"Content-type\" content=\"text/html;charset=utf-8\" /></head> <body> "; echo " <table> <tr> <th rowspan=\"2\" nowrap=\"nowrap\">เลขที่บัญชี</th> <th rowspan=\"2\" nowrap=\"nowrap\">ชื่อ-สกุล ลูกค้า</th> <th rowspan=\"2\" nowrap=\"nowrap\">OS/Balance</th> <th rowspan=\"2\" nowrap=\"nowrap\">วันที่</th> <th rowspan=\"2\" nowrap=\"nowrap\">เวลา</th> <th rowspan=\"2\" nowrap=\"nowrap\">Action Code</th> <th rowspan=\"2\" nowrap=\"nowrap\">Amount</th> <th colspan=\"5\" nowrap=\"nowrap\">ผลการติดตาม</th> </tr> <tr> <th nowrap=\"nowrap\">ที่อยู่บ้าน</th> <th nowrap=\"nowrap\">เบอร์โทรบ้าน</th> <th nowrap=\"nowrap\">เบอร์โทรมือถือ</th> <th nowrap=\"nowrap\">ที่อยู่ที่ทำงาน</th> <th nowrap=\"nowrap\">เบอร์โทรที่ทำงาน</th> </tr> <tr> <td>acc</td> <td>name</td> <td>balance</td> <td>date</td> <td>time</td> <td>code</td> <td>amount</td> <td>h-addr</td> <td>h-tel</td> <td>cell</td> <td>w-addr</td> <td>w-tel</td> </tr> </table> "; echo "</body></html>"; ?> 

Попробуй это:

 header('Content-Transfer-Encoding: binary'); header("Content-Type: application/octet-stream"); header("Content-Transfer-Encoding: binary"); header('Expires: '.gmdate('D, d MYH:i:s').' GMT'); header('Content-Disposition: attachment; filename = "Export '.date("Ymd").'.xls"'); header('Pragma: no-cache'); //these characters will make correct encoding to excel echo chr(255).chr(254).iconv("UTF-8", "UTF-16LE//IGNORE", $out);