[résolu] SimpleXML et encodage caractères

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


phpmikedu83
WRInaute accro
WRInaute accro
 
Messages: 1281
Inscription: Sam Aoû 06, 2005 7:34

[résolu] SimpleXML et encodage caractères

Message le Sam Aoû 18, 2007 20:37

Salut WRI,

J'ai un soucis pour parser des fichiers XML dont je ne maitrise pas la source (propreté de l'encodage des caractères)...
S'ils sont bien formés, pas de soucis, mais s'il y a des caractères non UTF8 (ou ISO selon la déclaration), ça plante (Normal)...

Comment, d'après vous, je peux détecter avant de parser ces caractères foireux et les remplacer par, au pire, un blanc...

Merci à toutes les brillantes idées qui vont fuser... ;-)
Dernière édition par phpmikedu83 le Dim Aoû 19, 2007 23:52, édité 1 fois.


julienr
WRInaute passionné
WRInaute passionné
 
Messages: 866
Inscription: Mar Aoû 05, 2003 14:49

Message le Sam Aoû 18, 2007 21:15

bienvenue à toi dans le club des 1000, alors c comment là haut :)
plus sérieusement tu as dû essayer de passer le xml avec un utf8_encode/utf8_decode ?


phpmikedu83
WRInaute accro
WRInaute accro
 
Messages: 1281
Inscription: Sam Aoû 06, 2005 7:34

Message le Sam Aoû 18, 2007 21:29

julienr a écrit:bienvenue à toi dans le club des 1000, alors c comment là haut :)


Merci, roff, ça doit pas être mal une mongolfière aussi :lol:

Sinon, pour revenir à mon problème, c'est que j'ai des caractères comme ça, par exemple:

Code: Tout sélectionner


Et que si j'applique un utf8_encode, je vais avoir les accents qui apparaissent comme ça:

Code: Tout sélectionner
é


C'est pas le but non plus...

En fait, je voudrais juste pouvoir virer les caractères pourris...


julienr
WRInaute passionné
WRInaute passionné
 
Messages: 866
Inscription: Mar Aoû 05, 2003 14:49

Message le Sam Aoû 18, 2007 21:50

Code: Tout sélectionner
str_replace( '?', ' ', $xml );
:arrow:

phpmikedu83 a écrit:Et que si j'applique un utf8_encode, je vais avoir les accents qui apparaissent comme ça:

oui si tu cherches à afficher de l'UTF8 dans une page ISO
pour moi utf8_encode doit te permettre d'uniformiser tes caractères pour le simpleXml. Ensuite tout ce qui est dans l'objet XML doit passer dans un utf8_decode


cloacking
WRInaute passionné
WRInaute passionné
 
Messages: 673
Inscription: Mer Oct 20, 2004 2:42

Message le Sam Aoû 18, 2007 22:02

ça fait la même chose sur le Packrefplex, je vais donc essayer cette technique de STR replace en attendant ...


phpmikedu83
WRInaute accro
WRInaute accro
 
Messages: 1281
Inscription: Sam Aoû 06, 2005 7:34

Message le Sam Aoû 18, 2007 22:42

julienr a écrit:
Code: Tout sélectionner
str_replace( '?', ' ', $xml );
:arrow:

phpmikedu83 a écrit:Et que si j'applique un utf8_encode, je vais avoir les accents qui apparaissent comme ça:

oui si tu cherches à afficher de l'UTF8 dans une page ISO
pour moi utf8_encode doit te permettre d'uniformiser tes caractères pour le simpleXml. Ensuite tout ce qui est dans l'objet XML doit passer dans un utf8_decode


au temps pour moi, mon document n'avait pas le bon charset...

pour autant, s'il existe un moyen de détecter ces caractères bizzaroïdes dans une chaîne, ça m'intéresse ;-)

bozoleclown
WRInaute passionné
WRInaute passionné
 
Messages: 893
Inscription: Jeu Nov 24, 2005 19:08

Message le Dim Aoû 19, 2007 2:00



cloacking
WRInaute passionné
WRInaute passionné
 
Messages: 673
Inscription: Mer Oct 20, 2004 2:42

Message le Dim Aoû 19, 2007 7:18

Je viens de trouver ça http://64.233.183.104/search?q=cache:dN ... d=11&gl=fr

Mais pas encore de solution


phpmikedu83
WRInaute accro
WRInaute accro
 
Messages: 1281
Inscription: Sam Aoû 06, 2005 7:34

Message le Dim Aoû 19, 2007 7:32

bozoleclown a écrit:un début de solution ?
=> http://www.tux-planet.fr/blog/?2007/04/ ... age-en-php


Non, car si je fait un htmlentities, ça rend ma string XML inexploitable...
Quand au mb_detect_encoding, il n'est d'aucune utilité, car le document contient des erreurs de caractères...

Ce que j'aimerais, et c'est pas plus mal, c'est détecter avant d'instancier la class que le document va poser problème et traiter l'erreur en ne parsant pas, par exemple...


cloacking
WRInaute passionné
WRInaute passionné
 
Messages: 673
Inscription: Mer Oct 20, 2004 2:42

Message le Dim Aoû 19, 2007 7:49

Cher voisin varois qui bosse aussi le dimanche :)
Je pense que mon lien plus haut signifie qu'il n'est en fait pas possible de modifier les ? car php analyse cela par une erreur et remplace automatiquement le caractère qui pose problème par ? :(


phpmikedu83
WRInaute accro
WRInaute accro
 
Messages: 1281
Inscription: Sam Aoû 06, 2005 7:34

Message le Dim Aoû 19, 2007 12:00

cloacking a écrit:Cher voisin varois qui bosse aussi le dimanche :)
Je pense que mon lien plus haut signifie qu'il n'est en fait pas possible de modifier les ? car php analyse cela par une erreur et remplace automatiquement le caractère qui pose problème par ? :(


Ok ok, dommage... mais là ça marche comme ça, tout en gardant les caractères bizzaroïdes qui sont évidemment reproduits par la suite... j'aurais préférer traiter ça comme une erreur avec mon script, mais bon!

bozoleclown
WRInaute passionné
WRInaute passionné
 
Messages: 893
Inscription: Jeu Nov 24, 2005 19:08

Message le Dim Aoû 19, 2007 13:28

cloacking a écrit: car php analyse cela par une erreur et remplace automatiquement le caractère qui pose problème par ? :(


php n'analyse pas les chaînes de caractères et ne remplacent pas les caractères mal encodés par des "?"

c'est le navigateur qui n'arrive pas à décoder le caractère et qui met un "?" ou au truc bizarrerie à la place.
php ne fait qu'envoyer des chaînes de caractères (suite d'octets) au navigateur qui lui interprète ces suites d'octets en fonction du charset déclaré.


phpmikedu83
WRInaute accro
WRInaute accro
 
Messages: 1281
Inscription: Sam Aoû 06, 2005 7:34

Message le Lun Aoû 20, 2007 0:23

A force d'acharnement, j'ai trouvé comment identifier un mauvais document XML (avec des caractères qui ne correspondent pas charset)

si:
Code: Tout sélectionner
ereg( chr(195) , utf8_decode($flux) );

renvoi true, c'est qu'il y a des caractères foireux dans le fichier XML

ça permet d'intercepter l'erreur et de la traiter... ce qui me ravie :-D


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités