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 :

Encodage avec fichier csv


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Points : 144
    Points
    144
    Par défaut Encodage avec fichier csv
    Bonjour,

    Je pense être dans le bon forum concernant un problème d'encodage dans un fichier .csv

    Dans un back office, certaines données peuvent être téléchargées au format .CSV.

    Tout se passe comme je le désire, mais quand j'ouvre mon fichier, j'ai des caractères bizarres.

    Exemple:

    Prénom est affiché Prénom.

    Donc pb d'encodage. Or mon htaccess prends par défaut l'utf-8 et je les déclare dans ma page de téléchargement également.

    J'ai essyé utf8_encode, utf8_decode,... d'autres charsets... Même pb
    Voici le code que j'ai écrit.(Je vous évite toutes les lignes de sécurité).

    Quelqu'un peut m'aider?

    Merci d'avance,
    David

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=email_list.csv');
    $output = fopen('php://output', 'w');
    fputcsv($output, array(TXT_EMAIL_ADDRESS, TXT_FIRSTNAME, TXT_LASTNAME));
    $sql = DbConnect::getInstance()->query("SELECT email,firstname,lastname
                                            FROM newsletter WHERE active=1
                                            ORDER BY email ASC");
    while($row = $sql->fetch(PDO::FETCH_ASSOC)){
        fputcsv($output, $row);
    }
    fclose($output);

  2. #2
    Invité
    Invité(e)
    Par défaut


    Ton code me semble plutôt correct. Le plus important avec les charsets c'est d'être cohérent d'un bout à l'autre de la chaîne. Donc les questions qu'il faut te poser sont :
    • Est-ce que les données sont bien en UTF-8 dans ta base de données ? Vérifie pour ça le charset dans ton phpMyAdmin ou dans ton script SQL de création de tes tables
    • Est-ce que la connexion PDO entre PHP et ta base de données se fait bien en UTF-8 ? Vérifie pour ça ta classe DBConnect, qui devrait lancer une requête du genre "SET NAMES utf8" juste après avoir ouvert la connexion

  3. #3
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Points : 144
    Points
    144
    Par défaut
    Merci de votre réponse.

    Oui j'ai tout vérifier avant de poster...

    Dans ma connexion:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    class DbConnect extends PDO{
        private static $instance = false;  
        public static function getInstance(){
            if(!self::$instance){
                throw new Exception("PDO instance  not initialized");
            }else{
                return self::$instance;
            }
        }
        public static function connect($dsn = "mysql:host=localhost;dbname=cambodge;charset=utf8", $username = "*****", $passwd = "*****"){
            self::$instance = new PDO($dsn, $username, $passwd);
            self::$instance->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND,'SET NAMES UTF8');
            self::$instance->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
            self::$instance->setAttribute( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
            self::$instance->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
            self::$instance->setAttribute(PDO::ATTR_PERSISTENT,TRUE);
            return self::$instance;
        }
    }
    $db = DbConnect::connect();
    et mon Htaccess:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AddDefaultCharset UTF-8
    Dans php my admin je suis en utf8_general_ci
    EDIT:
    Structure de ma table:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE IF NOT EXISTS `newsletter` (
      `id_newsletter` int(11) NOT NULL AUTO_INCREMENT,
      `email` varchar(100) DEFAULT NULL,
      `firstname` varchar(100) DEFAULT NULL,
      `lastname` varchar(100) DEFAULT NULL,
      `date_subscribe` datetime DEFAULT NULL,
      `lang` varchar(2) DEFAULT NULL,
      `active` int(11) DEFAULT NULL,
      PRIMARY KEY (`id_newsletter`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
    Je ne comprends pas cette erreur d'affichage... Et c'est plutôt ch****

    Peut-être une autre piste?

    Merci d'avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ok je vois que tout est bon à ce niveau-là... Tes fichiers de code PHP sont-ils bien tous encodés en UTF-8 également ? Je crois que ça peut jouer quand on écrit dans le flux de sortie...

  5. #5
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Points : 144
    Points
    144
    Par défaut
    Idem. Je suis bien en utf8

    Je ne comprends vraiment pas et cela me bloque....

    Cependant, quand j'ouvre le fichier .csv avec notpad++ ma première ligne est remplie de NULL NULL NULL... Normal?

    Merci

Discussions similaires

  1. Affichage de dates erronées avec fichier CSV
    Par The Molo dans le forum Excel
    Réponses: 4
    Dernier message: 27/12/2008, 12h06
  2. Création sous rapports avec fichiers csv
    Par Freedd dans le forum iReport
    Réponses: 2
    Dernier message: 27/06/2008, 10h37
  3. creation de table avec fichier csv
    Par pseudobidon57 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/09/2007, 14h05
  4. [VBA-E] SQL - ADODB avec fichier CSV
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/07/2007, 14h24
  5. Mettre a jour BD avec fichier csv
    Par Looping94510 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 07/02/2005, 18h56

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