[RESOLU] 3 caractères bizarres sur fichier txt

Eléphanteau du PHP | 24 Messages

05 sept. 2013, 17:18

Bonjour à toutes et tous,

Je lis un fichier txt en php avec fgets.
J'ai créé le fichier avec Notepad++ et pas de pb, je lis bien les enregistrements du fichier.

J'ai modifié le fichier avec blocnote et là, bizarre, bizarre, je me retrouve avec 3 caractères fantômes au début du premier enregistrement
Quand je fais un ord dessus pour voir le code ascii, j'ai: 239, 187, 191

Question pour spécialistes: A quoi correspondent ces trois caractères fantômes sur le premier enregistrement ???
Là, je sèche...

Merci à vous.
Cordialement

ViPHP
xTG
ViPHP | 7331 Messages

05 sept. 2013, 18:49

Je pencherai pour un encodage que blocnote ne gère pas. (il ne fait que de l'iso si je ne m'abuse)
Et donc lors de l'enregistrement il t'aurait fait n'importe quoi.
Car rien que le premier représente une lettre grecque...

Eléphanteau du PHP | 24 Messages

05 sept. 2013, 19:18

Bonjour,

Merci pour ta réponse.
En fait, le fichier est bon, c'est juste ces trois petits caractères invisibles dont la fonction ord renvoie 239,187 et 191 qui sont là.
On peut les enlever avec une fonction php ?

Cordialement

ViPHP
xTG
ViPHP | 7331 Messages

05 sept. 2013, 20:12

Plutôt que de les penser à les enlever je commencerai plutôt par comprendre comment ils sont arrivés moi.
Les vois-tu avec notepad++ ? (ou même avec le bloc note vu que la lettre grecque devrait s'afficher)

Eléphanteau du PHP | 24 Messages

05 sept. 2013, 21:21

Ok, d'accord avec toi, mais je ne sais pas pourquoi, c'est justement ma question.
Avec Notepad++, ils ne sont pas là...et avec blocnote oui...
Mais ils ne sont pas visibles, on les voit avec la fonction ord.
C'est hyper facile à tester:
Tu crée un fichier avec Notepad++, tu l'ouvres avec blocnote et tu l'enregistres. Tu fais un fget dessus en php et hop, tu as ces trois caractères en plus en début du premier enreg.
Si tu fais un strlen dessus, tu vois vite qu'il y a 3 caractères de plus...

J'ai réussi à les enlever avec la fonction trim et en bidouillant un code hexa car la fonction ord donne un code ASCII qui ne correspond à rien.

Quant au pourquoi et à quoi ça correspond, je pense que ce doit être vraiment chaud patate...
Voilà, voilà...
Je donne la main aux informaticiens si l'explication existe.

Cordialement.

ViPHP
xTG
ViPHP | 7331 Messages

06 sept. 2013, 09:18

Notepad++ permet de voir les caractères invisibles c'est pour cela que je te posais la question.
Mais la lettre grecque n'est de toute façon pas un caractère invisible !
Donc si tu ne la vois pas dans un éditeur... Je remettrai plutôt en cause ton code.
Voilà où je voulais en venir. :)

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

06 sept. 2013, 10:38

C'est quoi l'encodage du fichier ?
Parce que php ne gère pas l'utf8 cela expliquer l'erreur sur le strlen.

Ensuite avec le code php qui pose problème on pourrais y voir plus clair ;)


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 24 Messages

11 sept. 2013, 15:14

Hello,

Bon, j'ai trouvé (mon code n'est pas en cause :) )
Il se trouve que blocnote ajoute 3 "caractères" dans la première ligne du fichier qui indique que l'encodage est utf8.
Il suffit de les enlever.

Cordialement

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

11 sept. 2013, 23:11

=> BOM ?
cas assez classique malheureusement, c'est visible avec notepad++ qui va te l'indiquer dans le menu encodage ;)

@+
Il en faut peu pour être heureux ......