Si vous avez essayé mainte fois de produire un export excel de données issues d'une base en UTF-8 par PHP, vous êtes sans doute arrivés à des résultats surprenants.
Notre cher ami Microsoft utilise en fait l'encodage UTF-16le.
Ainsi, pour former un document excel (ici une liste d'utilisateurs), il vous "suffit" de faire :
<?php
header("Content-Type: application/vnd.ms-excel; charset=UTF-16LE");
header("Content-Disposition: attachment; filename=\"Export Excel\"");
mysql_connect("localhost","root","");
mysql_select_db("fake");
$sql = "SELECT * FROM users ORDER BY user_name";
$req = mysql_query($sql);
?>
<html><head></head><body>
<table>
<tr>
<td>Nom</td>
<td>Prénom</td>
<td>Email</td>
</tr>
<?
while ($row = @mysql_fetch_assoc($req))
{
?>
<tr>
<td><?=substr(chr(255).chr(254).mb_convert_encoding($row['user_sname'], "UTF-16LE", "UTF-8"),2)?></td>
<td><?=substr(chr(255).chr(254).mb_convert_encoding($row['user_fname'], "UTF-16LE", "UTF-8"),2)?></td>
<td><?=substr(chr(255).chr(254).mb_convert_encoding($row['user_email'], "UTF-16LE", "UTF-8"),2)?></td>
</tr>
<?
}
?>
</table>
</body></html>
@+
Si j'ai bien compris, ton problème est autre, tu souhaites exporter un fichier Excel en UTF-8 non ?
Si tel est le cas, c'est une m...e sans nom, j'ai été amené à vouloir récupérer des données Excel et de les convertir en UTF-8 pour les utiliser dans des applications tierces (en l'occurrence MySQL) et là, ce n'est pas une partie de plaisir...
Sous Excel 2003, même un export en CSV me pétait l'encodage ; le seul moyen que j'ai trouvé et qui est crade et fastidieux est le suivant :
Ex tableur de 3 colonnes:
Ex:
<?php
$str = file_get_contents("excel.csv")
file_put_contents("excel.csv",strip_tags($str));
?>
Gloire à Microsoft...
Export UTF8 vers Office 2008 Mac ne reconnait pas non plus UTF-16LE