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 :

Les guillemets dans un texte pour export csv [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut Les guillemets dans un texte pour export csv
    Bonjour à Tous,

    Je récupère une BDD mysql avec de nombreux champs text. Les données ont été mises en forme via un éditeur.
    Du coup a des trucs comme :

    La terre est bleue "comme une orange" dit le poète
    Je crée un script pour exporter tout ça sur un CSV avec point virgule en séparateur et, entourant chaque donnée...des guillemets "
    Du coup ça va donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ID;NOM;DESCRIPTION;PRIX
    1;"Le dernier Eluard";"La terre est bleue "comme une orange" dit le poète";"32.00"
    Et là ça coince. Comment puis-je nettoyer cela en laissant quand même des guillemets type « guillemets français qui ne seront pas interprétés par le moteur de lecture du CSV ?
    Je suppose que je peux faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    str_replace("\"","«",$str)
    Mais du coup j'aurai des guillemets ouvrants partout...

    Merci de votre aide !

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut doubler les guillemets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "La terre est bleue ""comme une orange"" dit le poète"
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    poste le code de ton script export csv, stp.

  4. #4
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    En fait j'ai trouvé une fonction qui semble aller bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function guillemets_french($str){
    $patterns = array();
    $replacements = array();
    $patterns[] = "/\"(.*)\"/isU";
    $replacements[] = "«\\1»";
    $str = preg_replace($patterns, $replacements, $str);
    return $str;	
    }
    Du coup les guillemets inclus dans le contenu se transforment en « ce qui ne nuit pas aux données encadrées de " pour ce CSV.
    Merci de vous être penchés sur mon post et bonne soirée.

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ça n'est pas vraiment une bonne solution pour plusieurs raisons: rien ne prouve à priori qu'il n'y a pas d'items avec un nombre impair de double quotes, rien ne prouve que ceux-ci ont vocation à encadrer quelque chose et peuvent être remplacer par des guillemets sans pervertir le sens, et puis conserver l'intégrité de l'information en passant d'une base de données à un csv c'est pas non plus le bout du monde.

    Si tu utilisais un autre SGBD que MySQL, je t'aurais dit de le faire coté BDD (elles ont toutes des fonctions d'export en CSV, mais malheureusement MySQL s'acharne à produire un format non standard en échappant les double quotes (justement) avec un antislash, alors qu'ils doivent l'être avec un autre double quote comme dans la réponse de sabotage).

    Donc la solution est de le faire coté PHP, mais pour cela il y a une fonction qui se charge toute seule d'encadrer les items et de l'échappement au besoin : fputcsv
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bonjour CosmoKnaki, tu as raison, je m'en aperçois aujourd'hui.
    De plus mon truc allait bien si je passais avant par un strip_tags (car les données étaient HTML), mais du coup je souhaite conserver les tags de mise en forme comme les liens.
    Avec ma fonction, ça dégage tout.
    Je vais regarder vers fputcsv.
    Merci.

  7. #7
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    C'était la méga bonne soluce !

    Merci et belle soirée !

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

Discussions similaires

  1. [MySQL] Comment gérer les ' et " dans une table pour exporter en excel
    Par morgan47 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 30/11/2011, 19h42
  2. Supprimer les insultes dans un texte oui mais...
    Par psychoBob dans le forum Langage
    Réponses: 19
    Dernier message: 16/04/2008, 15h03
  3. Moulinette pour export csv d'une base de données
    Par freestyler dans le forum C#
    Réponses: 6
    Dernier message: 16/02/2007, 11h57
  4. ADO et les guillemet dans les champs d'une base Texte
    Par jnc dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/10/2005, 08h41
  5. Supprimer les guillemets dans un fichier après écriture
    Par soulryo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/03/2005, 11h39

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