Bonjour à tous,
Je viens vers vous car j'ai un soucis que je vous détails ci-dessous.
L'entreprise pour laquelle je travail, va changer d'ERP/CRM pour sa gestion en générale.
Pour ce faire je dois exporter en fichier CSV les informations clients afin de pouvoir les importer dans le nouvel ERP/CRM.
J'ai donc mis en place une page d'exportation.
Tout d'abord, pour faciliter l'export j'utilise une fonction personnelle qui va convertir un tableau en fichier CSV
Mais voilà, chaque données que je vais enregistrée va se retrouvée avec des espaces supplémentaires.
Code : 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 <?php /** * @p (sgtring) : Chemin vers le dossier * @f (string) : Nom du fichier * @a (array) : Tableau PHP contenant les lignes à écrire dans leCSV **/ function arrToCsv($p,$f,$a){ // On ouvre le fichier en lecture / ecriture, Si le fichier n'existe pas on tente de le créer $fp = fopen($p.'/'.$f.'.csv', 'w+'); // Parcours le tableau foreach($a as $b){ // Ajoute au fichier la ligne en cours (elle-même un tableau incrémenté, sans clés définie) fputcsv($fp, $b, ";",' '); } // Ferme le fichier fclose($fp); // Un petit retour vite fait ( j'aime pas les fonction sans retour :p ) return true; } ?>
Exemple avec des données de base tel que le nom et prénom.
Dans ma base de données le nom est séparé du prénom, mais pas dans le nouvel ERP
Donc je doit formater ma donnée ce que je fait bien évidemment.
Mais voilà le print_r me retourne bien un tableau avec nom et prénom
Code : 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
22
23 <?php $tmp = array(); $req = "SELECT * FROM clients"; $qry = $pdo->query($req); while($r = $qry->fetch(PDO::FETCH_ASSOC)){ $nameFormated = $r['nom'].' '.$r['prenom']; // On concatène le nom et prénom pour le rendre compatible $tmp2 = array('name' => $nameFormated); $tmp[] = $tmp2; } // Juste pour les tests echo '<pre>'; print_r($tmp); echo '</pre>'; // Maintenant je converti en CSV $nameFile = 'export-'.time(); // Nom du nouveau fichier arrToCsv('mods/Exports/csv',$nameFile,$arr); // Converti mon tableau en CSV echo '<a href="mods/Exports/csv/'.$nameFile.'.csv">mods/Exports/csv/'.$nameFile.'.csv</a>'; ?>
Pas de soucis l'affichage est correct, mais étrangement mon fichier CSV double chaque espace qu'il trouve et j'obtiens des données avec des double espaceArray(
[0] => array(
[0] => 'Mon Nom et Prénom'
),
[1] => array(
[0] => 'Mon Nom 1 et Prénom 1'
),
etc...
)
Même les noms et prénom composés qui sont bien encodés avec un espace dans la base de données MySQL, se retrouve avec un deuxième espace vide dès qu'un espace est rencontrés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Affichage : Mon Nom et Prénom CSV : Mon Nom et Prénom
Ce que je ne comprend pas, puisque rien dans le code ou la base de données n'est sensé doublé chaque espace qu'il croise.
Ma table de ma BDD MySQL est en "innoDB" et utf8_genéral_ci
Mon fichier PHP est au format windows et encodé en utf8
Logiquement pas de conflit dû à l'encodage de caractère.
Si quelqu'un à une piste je suis preneur :p
D'avance merci de votre participation.
Belle journée
Spliffer
Partager