2009-12-17 8 views
2

J'utilise la méthode PHP SimpleXML pour travailler avec des fichiers XML sur mon serveur. J'ai seulement besoin de lire le contenu du XML (je n'ai pas besoin de le modifier) ​​donc je me suis contenté de SimpleXML simple et facile à utiliser. Mais SimpleXML a des problèmes pour lire un certain fichier XML parce qu'il a des caractères très étranges. J'obtenir les erreurs suivantes:Comment supprimer des caractères illégaux d'un fichier xml?

Warning: simplexml_load_file() [function.simplexml-load-file]: data/data.xml:348: parser error : PCDATA invalid Char value 3 in C:\xampp\htdocs\VMP\xintel\analyzer.php on line 54 

Warning: simplexml_load_file() [function.simplexml-load-file]: Jardin al fte. Hall de recepcion, amplio living comedor. ocina comedor diario c in C:\xampp\htdocs\VMP\xintel\analyzer.php on line 54 

Je ne contrôle pas ce qui se passe dans le fichier XML, donc je ne peux pas arrêter ces caractères d'être ajoutés au fichier. En outre, je ne sais pas comment résoudre ce problème. Le fichier est censé être encodé en utf-8. J'ai donc essayé des choses comme le décodage de l'UTF-8 à l'ISO-8859-1 et inversement, mais rien ne se passe.

Quelqu'un peut-il m'aider? Dois-je essayer de changer l'encodage? Dois-je essayer d'enlever ces caractères? N'importe quoi?

Edit: Les caractères stangre sont tous les caractères de boîte dessin (voir: http://en.wikipedia.org/wiki/Box-drawing_characters)

+2

Mettez-les en prison! : V – Sneakyness

+1

Si le fichier contient des caractères XML illégaux, il ne s'agit pas d'un fichier XML et l'utilisation d'un analyseur XML ne vous aidera pas. – skaffman

+0

Eh bien, je peux voir que les caractères illégaux plantent l'analyseur XML. – VinkoCM

Répondre

5

J'ai une application qui reçoit XML à partir de sources non fiables, dont beaucoup me envoient esperluette non codés. Pour résoudre le problème, j'ai un filtre intermédiaire qui fait un seul passage linéaire et se débarrasse de/encode les caractères si nécessaire. Je ne sais pas si c'est possible pour vous mais je pense que c'est une solution assez raisonnable.

+0

Ok, je comprends ce que vous dites. Mais je ne suis pas sûr de savoir comment faire cela. Votre application change-t-elle l'encodage ou remplace-t-elle réellement les caractères problématiques par des encodages de caractères? – VinkoCM

+0

Désolé, quand j'ai dit "encode" je ne faisais pas référence au jeu de caractères. Par exemple, dans le cas d'une esperluette brute, elle sera remplacée par & - vous devez alors vous assurer que cette perluète ne fait pas déjà partie d'un codage valide, OU faire une passe de décodage lorsque le traitement est terminé. – danben

+0

Je pense que c'est ce que je vais faire. Ce qui serait le mieux, c'est un moyen de ré-encoder tout le fichier xml pour qu'à l'avenir le script ne plante pas quand il rencontre un personnage que je ne peux pas vérifier. – VinkoCM

0

Normalement, tous les caractères d'un fichier XML sont interprétées sauf si elles sont dans une section CDATA =>link text

Si ce pas le cas de votre XML est invalide.

+2

La question est de savoir comment gérer un tel fichier XML invalide quand il n'est pas sous votre contrôle. – ceejayoz

+0

Je peux dire avec certitude que tout le texte dans le xml est placé dans des blocs CDATA. Donc, tous ces caractères se trouvent dans CDATA. – VinkoCM

+0

Avez-vous un exemple de fichier xml? – Patrick

2

Peut-être que vous pourriez passer l'entrée par Tidy pour le rendre bien formé. Une simple étape de pré-traitement avant de charger le fichier dans SimpleXML.

Par exemple, tidy::repairFile semble prometteur.

Questions connexes