Maison  >  Article  >  développement back-end  >  Comment résoudre les erreurs « L'entrée n'est pas appropriée UTF-8 » dans SimpleXML_Load_String de PHP ?

Comment résoudre les erreurs « L'entrée n'est pas appropriée UTF-8 » dans SimpleXML_Load_String de PHP ?

DDD
DDDoriginal
2024-10-24 06:33:30591parcourir

How to Resolve

Décodage des erreurs XML à l'aide de SimpleXML_Load_String de PHP

En PHP, l'utilisation de la fonction simplexml_load_string pour traiter les réponses XML peut parfois conduire à l'erreur : "Entrée n'est pas UTF-8 approprié, indiquez l'encodage !" Bien que le XML déclare un encodage UTF-8, il peut contenir des caractères non UTF-8, en particulier lorsqu'il s'agit de langues comme l'espagnol.

Correction des incompatibilités d'encodage

Pour Pour résoudre ce problème, plusieurs stratégies peuvent être utilisées :

  • Avertissez le fournisseur de données : Contactez la source tierce et informez-la du problème d'encodage, en l'invitant à le corriger.
  • Prétraitez le XML :

    • utf8_encode() : Utilisez cette fonction pour convertir le XML en UTF valide -8. Cependant, cette méthode peut entraîner mojibake si le XML contient à la fois des caractères UTF-8 et non UTF-8 valides.
    • iconv() ou mbstring : Tentative de conversion du XML à partir d'UTF -8 à UTF-8 à nouveau, en espérant que la fonction corrigera les erreurs.
    • Validation/correction personnalisée : Validez et corrigez manuellement les séquences d'encodage, une option qui prend du temps.

Détection de l'encodage correct

Malheureusement, PHP ne fournit pas de méthode définitive pour détecter automatiquement l'encodage correct d'un fichier XML.

Correction partielle

En tant que solution temporaire, la fonction suivante peut être utilisée pour résoudre partiellement les problèmes courants d'encodage Latin-1 dans UTF-8 :

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]);
}

Gardez à l’esprit que ce correctif n’est pas exhaustif et peut ne pas résoudre toutes les divergences d’encodage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn