Votre 0xED 0x6E 0x2C 0x20 octets correspondent à des "ín," ISO-8859-1, donc il semble que votre contenu est en ISO-8859-1, pas en UTF-8. Dites à votre fournisseur de données à ce sujet et leur demander de le réparer, parce que si ça ne fonctionne pas pour vous, il n'a probablement pas travailler pour d'autres personnes.
Maintenant, il ya quelques façons de travailler autour de qui vous ne devez les utiliser si vous ne pouvez pas charger le XML normalement. L'un d'entre eux serait d'utiliser utf8_encode()
. L'inconvénient est que si que XML contient à la fois valide UTF-8 et ISO-8859-1 alors le résultat contiendra mojibake. Ou vous pouvez essayer de convertir la chaîne en UTF-8 UTF-8 à l'aide d' iconv()
ou mbstring, et de l'espoir qu'ils vont le corriger pour vous. (ils ne sont pas, mais vous pouvez au moins ignorer les caractères non valides afin que vous pouvez charger votre XML)
Ou vous pouvez prendre le long de la route et de valider/corriger les séquences par vous-même. Qui va vous prendre un certain temps selon la façon dont vous vous serez familiarisé avec l'encodage UTF-8. Peut-être il y a des bibliothèques qui ferait que, bien que je ne sais pas tout.
De toute façon, avisez votre fournisseur de données qu'ils envoient des données non valides, de sorte qu'ils peuvent résoudre le problème.
Voici une correction partielle. Il sera certainement pas de tout régler, mais de résoudre certains de il. Espérons-le, assez pour vous d'obtenir par jusqu'à ce que votre fournisseur de fixer leurs trucs.
function fix_latin1_mangled_with_utf8_maybe_hopefully_most_of_the_time($str)
{
return preg_replace_callback('#[\\xA1-\\xFF](?![\\x80-\\xBF]{2,})#', 'utf8_encode_callback', $str);
}
function utf8_encode_callback($m)
{
return utf8_encode($m[0]);
}