The 2008-05-23 at 11:10 by Loïc d'Anterroches filed under News.
Juste au passage, une pétition pour l’utilisation de standards ouverts au niveau européen. Cela ne fait pas de mal de la signer, surtout que je pense que je viens de passer plus de 2h à trouver une solution pour permettre à Excel d’ouvrir un fichier .csv encodé en utf-8 sans bouffer tous les caractères. La compatibilité c’est important !
Le truc en PHP est de créer un fichier délimité par des tabulations, puis de le convertir en UTF-16 avec le BOM FF FE :
$xls = "Mon fichier\tDélimité\tpar\tdes\ttabs\töï\r\n"; $xls = chr(255).chr(254).mb_convert_encoding($xls, 'UTF-16LE', 'UTF-8');
Maintenant $xls est bon pour être lu avec Excel, à vous de sauvegarder le contenu en .xls ou d’envoyer le contenu directement au navigateur. Astuce après 100 minutes à essayer de faire fonctionner une classe pour générer des fichiers Excel. Arg… Note, si vous pensez que produire de l’utf-8 avec le bon BOM va fonctionner, par exemple :
$xls = "Mon fichier\tDélimité\tpar\tdes\ttabs\töï\r\n"; $xls = chr(239).chr(187).chr(191).$xls;
Et bien non, cela ne fonctionne pas.
Comments from readers
PJ said:
Alleluia. Je cherchais la solution depuis quelques heures et j'étais sur le point de faire la technique avec BOM pour UTF-8. Merci pour l'info sur le fait que ça marche pas avec le BOM UTF-8 et pour la code à utiliser avec l'utf-16. Tout marche pour moi maintenant. Encore merci
Loïc said:
Content de voir que cela peut économiser du temps à quelqu'un ! J'ai fait un nombre incroyable de navettes avec des utilisateurs de Office/Windows pour trouver cela, car open office supporte très bien l'UTF-8 avec BOM... c'était donc impossible de l'utiliser comme référence.