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

11 février 2020

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.