Page 1 sur 2
Fonctions fgetcsv() et caractères spéciaux (§)
Posté : 18 mai 2009, 17:04
par lorenzeb
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
Posté : 19 mai 2009, 09:05
par lorenzeb
Aucune idée sur le sujet ?
Merci
Posté : 19 mai 2009, 09:54
par Hywan
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 ?
Posté : 19 mai 2009, 11:58
par lorenzeb
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
Posté : 19 mai 2009, 12:52
par Hywan
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).
Posté : 19 mai 2009, 15:21
par lorenzeb
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.
Posté : 19 mai 2009, 15:43
par Hywan
Mon fichier CSV de test :
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 :
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.
Posté : 19 mai 2009, 15:58
par lorenzeb
Merci pour ces infos,
J'ai testé de lire mon fichier avec la fonction fread() et je retrouve bien mon caractère.
Posté : 19 mai 2009, 16:02
par lorenzeb
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"
Posté : 19 mai 2009, 16:03
par Hywan
On peut voir la ligne de ton fichier CSV ? (Je commence à me lasser de demander les choses …).
Posté : 19 mai 2009, 16:23
par lorenzeb
Ok mais je t'ai déjà tout donné.
ABFE1423;§GEUT_BD_Superviseur
Posté : 19 mai 2009, 16:33
par lorenzeb
Je n'ai rien de plus sur chaque ligne.
Posté : 19 mai 2009, 16:38
par Hywan
Et qu'est-ce que tu dis de passer à une vraie base de données

?
Essaye de réécrire manuellement ton fichier (ou au moins une ligne). Peut-être que tu as un caractère « invisible » quelque part.
Posté : 19 mai 2009, 17:02
par lorenzeb
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.
Posté : 19 mai 2009, 17:03
par lorenzeb
PostgreSQL pardon.
