fputs et fputcsv

Petit nouveau ! | 1 Messages

01 sept. 2016, 23:57

Bonjour,
Je n'arrive toujours pas à comprendre le problème, normalement fputcsv démarrait avec php 5.0.2, ma version php est 5.2, à l'execution toujours le navigateur ne reconnait pas cette instruction
concernant fputs et le codage, mon fichier Excel ne reconnait pas les caractères spéciaux " é à è ...." il les convertie en carractères non erconnus, je sais bien que c'est un problème d'encodage
j'ai inséré la ligne suivante dans ma source

fputs($myfile, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
le problème de codage est résolu sauf que

malgré que j'ai inséré "\t" le saut de colonnes ne s'effectue pas , tous mes champs s'affichent dans une ligne
fputs($myfile,"$champs2\t $champs3\t $champs4\t $champs41\t $champs5\t $champs6\t $champs7\t $champs8\t $champs9\n");

si je supprime la ligne fputs($myfile, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) )); de mon code le saut de colonnes est effectué sans problème et bien sûr le problème d'encodage revient
Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

02 sept. 2016, 00:07

Bonjour,

C'est \r\n pour un retour à la ligne sous Windows
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 sept. 2016, 10:13

Bonjour,

Par défaut, le séparateur de colonnes attendu par Excel pour un fichier csv est le point-virgule. Si tu utilises un autre séparateur tel que la tabulation, Excel peut considérer que celui-ci fait parti de la chaîne à afficher et va donc restituer toute la ligne dans une même colonne. Il est donc préférable je pense d'utiliser ";" plutôt que "\t".

Si tes champs sont susceptibles de contenir des points virgules, alors ceux-ci doivent être entourés de guillemets.
123;"x;y";456 => génère 3 colonnes : 123, x;y et 456

Si tes champs sont susceptibles de contenir des guillemets, celles-ci doivent être doublées
123;"x""y";456 => génère 3 colonnes : 123, x"y et 456

Si tu tiens absolument à utiliser la tabulation ou tout autre séparateur, ou que le point-virgule ne fonctionne pas mieux et que le tableur affiche tout dans une seule colonne, il suffit simplement à l'utilisateur de sélectionner la première colonne et de les convertir (onglet "Données" -> groupe "Outils de données" -> action "Convertir"). Tu peux alors indiquer si les colonnes de ton fichier sont à taille fixe ou délimitées par un séparateur et le cas échéant spécifier quels séparateurs sont utilisés (tabulation, point-virgule, virgule, espace, autre...)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

02 sept. 2016, 15:48

Et également il me semble que par défaut l'encodage à utiliser est de l'iso8859-1 (et pas de l'utf-8) pour ne pas avoir de problème d'accents
Quand tout le reste a échoué, lisez le mode d'emploi...