Fonctions fgetcsv() et caractères spéciaux (§)

lorenzeb
Invité n'ayant pas de compte PHPfrance

18 mai 2009, 17:04

Bonjour à tous,

Voilà j'ai un problème à la lecture d'un fichier CSV. Un de mes champs comporte la valeur §valeur.

Le problème est que la fonction fgetcsv() me renvoi uniquement valeur sur mon serveur Linux, et que cela fonctionne très bien sur mon serveur Windows.

Le caractère passe donc à la trappe. Si le je le place ailleurs du style val§eur, là je retrouve bien mon caractère à la lecture.

Autre précision, lorsque j'encadre ma valeur du caractère " comme ceci "§valeur", je récupère bien tout mon champs. Le problème est que ce n'est pas moi qui génère ce fichier et que les valeurs ne sont donc formater de cette manière.

Quelqu'un aurait-il une idée à mon problème ?

J'ai recherché un peu sur le forum pour une réponse en vain. J'espère que ce message ne fait pas doublon.

Je vous remercie

lorenzeb
Invité n'ayant pas de compte PHPfrance

19 mai 2009, 09:05

Aucune idée sur le sujet ?

Merci

ViPHP
ViPHP | 4674 Messages

19 mai 2009, 09:54

Hey :-),

Quels sont les encodages de ton script et ton fichier CSV ? Peut-on avoir la ligne complète de ton fichier CSV ? Peut-on avoir ton script PHP ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

lorenzeb
Invité n'ayant pas de compte PHPfrance

19 mai 2009, 11:58

Bonjour merci pour ta réponse,

Alors mon l'encodage dans mon php.ini est configuré de cette manière :

- default_charset = "iso-8859-15"

Voici la ligne de mon fichier CSV :

AAAA1111;§appli

En ce qui concerne le code je vais éviter de le mettre car je suis en entreprise. Cela dit je peux vous dire que je n'ai défini aucun encodage particulier dans mon fichier que ce soit en php ou en HTML.

Peux-être cela vient-il de là ?

Sinon j'utilise la fonction fgetcsv() de la manière la plus basic qui soit.

Je rappel qu'en passant par WAMP donc sur mon Windows, cela fonctionne. Une fois les scripts déposés sur mon serveur Linux, cela ne fonctionne plus.

L'encodage du php.ini est le même sur les deux plate-forme.

Merci

ViPHP
ViPHP | 4674 Messages

19 mai 2009, 12:52

Si je n'ai aucun code, je ne peux pas t'aider énormément. Je demande juste une ligne, ce qui n'est pas gênant pour ton entreprise …
Quand tu affiches le résultat, essaye avec la fonction var_dump() et donne moi le résultat (en plus d'un peu de code).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

lorenzeb
Invité n'ayant pas de compte PHPfrance

19 mai 2009, 15:21

Ok donc voici le code réduit de lecture du fichier mais je ne pense pas que ça t'aide beaucoup.
function lireCSVRepriseRA($pathFichier){
	
	$handleFichier = fopen($pathFichier, "r");
	
	while (($data = fgetcsv($handleFichier,CSV_MAX,";")) !== false) {
	
		echo $data[0];
		echo $data[1];
	}
	fclose($handleFichier);
}

Voici le résultat de la première ligne :

string(8) "ABFE1423"
string(19) "GEUT_BD_Superviseur"

Le résultat de la seconde valeur aurait donc du être §GEUT_BD_Superviseur

S'il te manque encore des informations n'hésite pas.

ViPHP
ViPHP | 4674 Messages

19 mai 2009, 15:43

Mon fichier CSV de test :

Code : Tout sélectionner

lorem;ipsum;§est;dolor
Mon fichier PHP de test :
<?php

$fp = fopen('test.csv', 'r');

while(false !== $data = fgetcsv($fp, 0, ';'))
    print_r($data);

fclose($fp);
Le résultat :

Code : Tout sélectionner

Array ( [0] => lorem [1] => ipsum [2] => §est [3] => dolor )
On dirait que ça marche mon p'tit père :-).

Mes deux fichiers (CSV et PHP) sont encodés en UTF-8.
Essaye de lire simplement le fichier, sans passer par fgetcsv(), juste pour voir s'il lit bien le caractère. Ça éliminera plusieurs possibilités.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

lorenzeb
Invité n'ayant pas de compte PHPfrance

19 mai 2009, 15:58

Merci pour ces infos,

J'ai testé de lire mon fichier avec la fonction fread() et je retrouve bien mon caractère.

lorenzeb
Invité n'ayant pas de compte PHPfrance

19 mai 2009, 16:02

Egalement,

Si je place mon caractère ailleurs dans le libellé du champs je le retrouve.

Exemple :

string(8) "ABFE1423"
string(20) "GEUT_BD_§Superviseur"

ViPHP
ViPHP | 4674 Messages

19 mai 2009, 16:03

On peut voir la ligne de ton fichier CSV ? (Je commence à me lasser de demander les choses …).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

lorenzeb
Invité n'ayant pas de compte PHPfrance

19 mai 2009, 16:23

Ok mais je t'ai déjà tout donné.

ABFE1423;§GEUT_BD_Superviseur

lorenzeb
Invité n'ayant pas de compte PHPfrance

19 mai 2009, 16:33

Je n'ai rien de plus sur chaque ligne.

ViPHP
ViPHP | 4674 Messages

19 mai 2009, 16:38

Et qu'est-ce que tu dis de passer à une vraie base de données :-D ?

Essaye de réécrire manuellement ton fichier (ou au moins une ligne). Peut-être que tu as un caractère « invisible » quelque part.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

lorenzeb
Invité n'ayant pas de compte PHPfrance

19 mai 2009, 17:02

Ahah bah le problème c'est que j'injecte justement ces données en base. Qui est d'ailleurs une base PotgreSQL.

Malheureusement j'ai déjà tenter de réécrire le fichier à la main.
J'ai également vérifié avec notepad++ le fichier que l'on m'a fournis en changeant les encodages mais aucune trace de caractère suspect.

Vraiment je ne comprends pas.

Je te remercie de ton aide en tout cas.

lorenzeb
Invité n'ayant pas de compte PHPfrance

19 mai 2009, 17:03

PostgreSQL pardon. :lol: