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

Développement Web

Fil des billets - Fil des commentaires

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.

25 juillet 2019

OVH: utiliser une version de PHP différente par sous-domaine

Sur les offres d'hébergements mutualisés OVH, il est possible de définir une version différente de PHP par sous-domaine.

Prenons par exemple l'arborescence suivante en indiquant les versions de PHP voulues:

/home
  |__ www (PHP 7.1)
  |__ sous-domaine1 (PHP 7.2)
  |__ sous-domaine2 (PHP 7.3)
  .ovhconfig

Vous devriez avoir à la racine de votre hébergement un fichier .ovhconfig qui ressemble à celui-ci:

app.engine=php
app.engine.version=7.3
http.firewall=none
environment=production
container.image=stable

Si ce n'est pas le cas, prenez cet exemple. Ce fichier reprend la configuration visible depuis votre manager OVH.

Il faut placer un fichier .ovhconfig à la racine de chaque sous-domaine en modifiant la valeur de la clé "app.engine.version" par la version de PHP voulue.

Si on reprend l'exemple précédent, il faut :

  • Placer dans le dossier www/ une copie du fichier .ovhconfig en modifiant app.engine.version=7.3 par app.engine.version=7.1
  • Placer dans le dossier sous-domaine1/ une copie du fichier .ovhconfig en modifiant app.engine.version=7.3 par app.engine.version=7.2
  • Placer dans le dossier sous-domaine2/ une copie du fichier .ovhconfig (dans notre cas sans modification car nous voulons la version 7.3)

Erreur "Not Implemented"

Si vous rencontrez une erreur "Not Implemented", rendez-vous dans la configuration de votre hébergement sur le manager OVH et choisissez la version de PHP la plus récente: