IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Exporter un CSV avec caractères spéciaux pour Excel [Encodage]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut Exporter un CSV avec caractères spéciaux pour Excel
    Bonjour à tous,

    J'ai un souci. Je souhaite exporter des données au format CSV pour des clients. Le fichier est très bien lu par OpenOffice Calc sur mon linux, et il passe tout aussi bien sur le bloc-notes de Windows, mais dès que je l'ouvre avec Excel, c'est fini, les caractères spéciaux ne sont plus gérés et c'est le grand n'importe quoi. Quelqu'un a une idée de ce que je peux faire?

    Voilà mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    header("Pragma: public");
    header("Expires: 0"); // set expiration time
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/txt; charset=UTF-8");
    header('Content-Disposition: attachment; filename="' . $name . '.csv"');
    //header('Content-type: application/octet-stream');
    //$fp = fopen("php://output", 'w');
    foreach($data as $ligne) {
    	//fputcsv($fp, $ligne);
    	foreach($ligne as $value)
    		echo $value.',';
    	echo "\n";
    }
    Les lignes en commentaire correspondent à des alternatives que j'ai testé mais qui m'ont donné le même résultat final.

    Je sais qu'Excel utilise par défaut le format Windows125x, ou un truc similaire, mas même en faisant des trucs du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iconv("UTF-8", "Windows-1252", maData);
    et en virant l'entête disant que c'est de l'UTF-8, j'obtiens le même problème.

    A l'heure actuelle, je fais un utf8_encode sur toutes mes données dans la fonction d'export.

    J'ai presque envie de dire "pitié, sauvez ma chevelure" XD
    Merci d'avance à tous!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    A l'heure actuelle, je fais un utf8_encode sur toutes mes données dans la fonction d'export.
    Est-ce que cela fonctionne ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Est-ce que cela fonctionne ?
    Non, justement. D'où mon incompréhension du problème.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    et ta méthode pour créer un CSV n'est pas bonne non plus, pourtant t'éetait bien partis avec fputcsv, de plus ca par souvent d'une moauvaise habitude de l'utilisateur : sous Excel on ouvre pas un CSV mais on importe un CSV

  5. #5
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    Va expliquer ça à un client lambda.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par gwinyam Voir le message
    Va expliquer ça à un client lambda.
    si il attend de l'Excel c'est a toi de faire un fichier Excel, d'ailleurs qu'en t'ouvre directement un CSV y'a un message d'alerte, tu peux utiliser des lib comme PHPExcel, sinon Google Docs fait ca aussi en webservice

  7. #7
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    La solution que j'adopte est de retirer tout caractères spéciaux. Pour les caractères spéciaux, rien de compliqué, pour les valeurs monétaires, j'utilise Zend_Currency, donc avec l'option display à SHORT_NAME, je n'ai pas de caractères spéciaux et ainsi de suite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-MAC 2011] exporter un CSV avec inversion jour et mois pour google calendar
    Par Holycat dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/06/2015, 22h22
  2. Réponses: 1
    Dernier message: 24/06/2013, 22h27
  3. recupérer GET avec caractères spéciaux
    Par masseur dans le forum Langage
    Réponses: 11
    Dernier message: 03/01/2006, 11h37
  4. [RegEx] chaîne de caractères avec caractères spéciaux
    Par Kerod dans le forum Langage
    Réponses: 9
    Dernier message: 25/12/2005, 01h40
  5. Réponses: 3
    Dernier message: 11/10/2004, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo