Aller au contenu | Aller au menu | Aller à la recherche

Fichier CSV généré avec PHP: forcer Excel à reconnaître l'UTF-8

Si vous générez un fichier CSV avec PHP, par exemple:

<?php

$csv = fopen('file.csv', 'w');
fputcsv($csv, ['é', 'è', 'à']);
fclose($csv);

Le fichier sera correctement généré, comme nous pouvons le voir en ouvrant le fichier file.csv avec un éditeur de texte :

 CSV ouvert avec le bloc-note

 Toutefois, si nous ouvrons le fichier avec Excel, le support de l'UTF-8 n'est pas pris en charge :

 CSV ouvert avec le bloc-note

Pour résoudre ce problème, il faut ajouter le BOM suivant au début du fichier: EF BB BF

Ce qui donne :

<?php

$csv = fopen('file.csv', 'w');
fwrite($csv, "\xEF\xBB\xBF"); // Doubles quotes obligatoires !
fputcsv($csv, ['é', 'è', 'à']);
fclose($csv);

Résultat :

CSV ouvert avec le bloc-note

Quelques explications :

En Unicode, l'indicateur d'ordre des octets ou BOM (pour l'anglais byte order mark) est une donnée qui indique l'utilisation d'un encodage unicode ainsi que l'ordre des octets, généralement situé au début de certains fichiers texte. (Source: Wikipédia)

La séquence d'octets EF BB BF est utilisé comme marqueur pour indiquer que le texte est codé en UTF-8.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : https://blog.maximepinot.com/index.php/trackback/6

Fil des commentaires de ce billet