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>