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();
Ce que je reçois dans le fichier Excel est Désçà ui
Cependant, je reçois Désçàui quand j'essaie
ob_start();
echo 'Désçàui';
header("Content-Type: text/html; charset=utf-8");
ob_end_flush();
Des experts de l'aide?
PS. Le fichier est enregistré dans DW avec Titre/Encodage Unicode (Utf-8).
Je ne suis pas sûr, mais il se peut qu'Excel ne puisse pas gérer utf8 (peut dépendre de la version). Mais il peut gérer utf16, essayez donc de convertir le jeu de caractères . Cela fonctionne pour moi (sous Excel2002):
echo mb_convert_encoding('Désçàui','utf-16','utf-8');
Je ne sais pas comment vous générez le fichier Excel. Toutefois, si vous le faites à partir d’une sortie HTML, vous pouvez simplement ajouter ce qui suit au début:
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
Cordialement
Source http://www.mwasif.com/2007/5/download-data-csv-using-php/
Danois Zahour a dit:
7 octobre 2009 à 19h23
Si votre contenu est au format UTF-8, inutile de convertir le codage. Il suffit de démarrer votre flux de fichier/sortie avec la nomenclature UTF-8 après les en-têtes.
echo pack("CCC",0xef,0xbb,0xbf);
Et en-tête doit contenir le codage UTF-8
header( "Content-type: application/vnd.ms-Excel; charset=UTF-8" );
Cela fonctionnera comme un charme car Excel reconnaîtra le jeu de caractères avec les octets de la nomenclature.
Cette ligne de code de nomenclature UTF-8 a bien fonctionné avec mes caractères 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;
Les en-têtes content-type
ne concernent que le navigateur. Ils n'ont aucun effet sur les fichiers téléchargés. Une fois le fichier enregistré, il appartient à l’application de décider de la manière dont elle traite les données du fichier.
L'exemple que vous montrez n'est pas un fichier Excel valide. Lorsque vous rencontrez un fichier défectueux, Excel passe probablement à un traitement par défaut qui suppose windows-1252
ou à un autre jeu de caractères à un octet.
Vous devrez donner à Excel un fichier approprié à ouvrir. Alternativement, il peut être possible d'utiliser l'ancienne astuce "Sortie HTML mais enregistrer sous XLS" et spécifier un codage UTF-8 dans ce fichier HTML.
La conversion de utf8 en entités html a bien fonctionné pour moi:
$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 ;
essaye ça
<?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>";
?>
Essaye ça:
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);