Je recherche et traite des fichiers XML d'ailleurs et besoin de transformez-les avec des xslts. Aucun problème. En utilisant php5 et le dom Bibliothèque, tout est un snap. Travaillé bien, jusqu'à maintenant. Aujourd'hui, funky les caractères étaient dans le fichier XML - "Smart" citations de Word, il a l'air aimer. Quoi qu'il en soit, Domdocument-> Charge se plaignait d'eux, en disant que Ils n'étaient pas UTF-8 et de spécifier le codage. P>
lo et voici, l'encodage n'est pas spécifié dans ces fichiers XML. Si je Ajouter in 'codage = "ISO-8859-1"' à l'en-tête, ça marche bien. Le frottement est Je n'ai aucun contrôle sur ces fichiers XML. P>
lire le fichier dans une chaîne, modifier son en-tête et écrire à un autre endroit semble être ma seule option, mais je préférerais faire Il sans avoir à utiliser des copies temporaires des fichiers XML du tout. Est là-bas de dire simplement à l'analyseur de les analyser comme s'ils étaient ISO-8859-1? P>
3 Réponses :
Est-ce que cela fonctionne pour vous?
$myXMLString = file_get_contents($xmlPath);
$myXMLString = utf8_decode($myXMLString);
$doc = new DOMDocument('1.0', 'iso-8859-1');
$doc->loadXML($myXMLString);
Essayé cela - il ne semble pas affecter le document chargé - de ma lecture, je suis à peu près sûr que le codage est réinitialisé par l'appel de charge ()
Je n'ai pas trouvé de moyen de définir le codage par défaut (encore) mais peut-être b> Le mode récupération est réalisable dans ce cas. impression p> Vous obtenez toujours le message d'avertissement (qui peut être supprimé avec @ $ doc-> charge ()) et il apparaîtra également dans le erreurs internes libxml (une seule fois lorsque l'analyseur passe de l'UTF8 en latin1). Le code d'erreur pour cette erreur particulière sera de 9 (xml_err_invalid_char). p>
Lorsque LibXML rencontre une erreur de codage et aucun encodage n'a été défini explicitement des commutateurs d'UNICODE / UTF8 en latin1 et continue à analyser le document. Mais dans le contexte d'analyseur, la propriété forcée code> est défini sur 0 / false. L'extension DOM de PHP considère que le document valide si forcé code> est vrai ou b> l'attribut de l'objet DOMDocument Récupérer code> est vrai.
Le seul moyen de spécifier le codage est dans la déclaration XML au début du fichier:
<?xml version="1.0" encoding="ISO-8859-1"?>
C'est la seule réponse correcte - voir aussi Stackoverflow.com/Questions/8218230/...