Bonjour,

Voila je rencontre un petit problème avec mon code.

Je récupere un fichier csv en php mais j'ai un symbole (b) qui vient me polluer certaines de mes entrées. Voici ce que je fais:
Mon fichier csv etant genere depuis excel par des personnes n'y connaissant rien au csv, celui-ci sera avec des ";" comme separateur.
Je recupere donc mes données comme ca:

while (($data[] = fgetcsv($handle)) !== FALSE) {
            dump($data);
        }

puis j'explode mes données pour avoir tout ca dans un tableau:

$enteteCsv = explode(";",$data[0][0]);

La, sur cetaines entrées, j'ai ca:

b"monEntrée"

J'ai regardé dans le manuel PHP et je trouve bien tout ce qu'il faut pour retirer des caracteres aussi diverses que variés dans des chaines de caracteres... mais pas juste avant celle-ci.
Si une personne a déja rencontrer ce type probleme et sait le regler ca m'aiderai beaucoup.
J'suis sur que c'est un ptit truc mais j'arrive pas a voir quoi.

3 réponses


GabrielT
Auteur
Réponse acceptée

Bonjour Messieurs, Merci pour vos retours.
La solution n'a pas été simple a trouver.
La génération du caractere binaire est handicapant ET excel ne nous permet de mettre en separateur des virgule qu'en changeant les parametres regionaux de windows.
Pour faire en sorte que tout fonctionne, il faut:

  • faire une sauvegarde de notre fichier xls au format csv en demandant que le séparateur soit ","... meme si excel ne le fera pas. (on peut le voir en ouvrant le fichier csv avec le bloc-note)
  • utiliser le delimiteur ";" dans la fonction fgetcsv

En faisant comme ca, on evite le caractere binaire et on arrive bien a récuperer nos entrées.

Si on sauvegarde notre fichier xls au format csv en demandant que le séparateur soit ";", nous auront des caracteres binaires.
Même chose si on essai de modifier les paramètres regionaux de windows pour avoir de vrais ",".
Merci encore a vous deux et j'espere que cette solution pourra service a d'autre personne.

Salut,

Tu peux pas retiré ce caratères car il n'existe pas vraiement, c'est juste à l'affichage. C'est pour dire que c'est une chaine de caractères binaire et non unicode.

https://stackoverflow.com/questions/4749442/what-does-the-b-in-front-of-string-literals-do

Bonjour,

Pour information, le délimiteur/séparateur ";" peut être spéficié à la fonction fgetcsv.