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).
Ответы
Ответ 1
Я не уверен, но может быть, что excel не может обрабатывать utf8 (может зависеть от версии). Но он может работать с utf16, поэтому попробуйте преобразовать кодировку.
Это работает для меня (в excel2002):
echo mb_convert_encoding('Désçàui','utf-16','utf-8');
Ответ 2
Источник 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 распознает кодировку файлов с байтами спецификации.
Ответ 3
Я не знаю, как вы создаете файл excel. Но, если вы делаете это из вывода HTML, вы можете просто добавить следующее в начале:
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
Привет
Ответ 4
Эта строка кода спецификации UTF-8 сделала мои символы 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;
Ответ 5
Заголовки content-type
относятся только к браузеру. Они не влияют на загруженные файлы. После сохранения файла приложение может решить, как он обрабатывает данные в файле.
Приведенный вами пример не является действительным файлом Excel в первую очередь. Когда он сталкивается с тем, что он должен считать сломанным файлом, Excel, вероятно, переключается на некоторую обработку по умолчанию, которая предполагает windows-1252
или какой-то другой однобайтовый набор символов.
Вам нужно будет предоставить Excel подходящий файл для открытия. В качестве альтернативы можно использовать старый трюк "Выход HTML, но сохранить как XLS" и указать кодировку UTF-8 в этом HTML файле.
Ответ 6
Преобразование 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 ;
Ответ 7
попробуйте это
<?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>";
?>
Ответ 8
Попробуйте следующее:
header('Content-Transfer-Encoding: binary');
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
header('Content-Disposition: attachment; filename = "Export '.date("Y-m-d").'.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);