[résolu] SimpleXML et encodage caractères

WRInaute passionné
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... ;-)
 
WRInaute impliqué
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 ?
 
WRInaute passionné
julienr a dit:
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:

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

Code:
é

C'est pas le but non plus...

En fait, je voudrais juste pouvoir virer les caractères pourris...
 
WRInaute impliqué
Code:
str_replace( '?', ' ', $xml );
:arrow:

phpmikedu83 a dit:
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
 
WRInaute passionné
julienr a dit:
Code:
str_replace( '?', ' ', $xml );
:arrow:

phpmikedu83 a dit:
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 ;-)
 
WRInaute passionné
bozoleclown a dit:

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...
 
WRInaute impliqué
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 ? :(
 
WRInaute passionné
cloacking a dit:
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!
 
WRInaute impliqué
cloacking a dit:
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é.
 
WRInaute passionné
A force d'acharnement, j'ai trouvé comment identifier un mauvais document XML (avec des caractères qui ne correspondent pas charset)

si:
Code:
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
 
Discussions similaires
Haut