Position actuelle: Accueil> Derniers articles> Utilisez XML_PARSER_GET_OPTION pour vérifier les paramètres de codage des caractères de l'analyseur XML

Utilisez XML_PARSER_GET_OPTION pour vérifier les paramètres de codage des caractères de l'analyseur XML

gitbox 2025-05-29

Introduction à xml_parser_get_option ()

XML_PARSER_GET_OPTION () est utilisé pour obtenir les paramètres d'un analyseur XML spécifique. Le prototype de fonction est le suivant:

 mixed xml_parser_get_option(resource $parser, int $option)

$ l'analyse est une ressource d'analyse créée par XML_PARSER_CREATE () ou des fonctions connexes, et l'option $ est la constante d'option que vous souhaitez obtenir, telle que XML_OPTION_TARGET_ENCODING , XML_OPTION_CASE_FOLDING , etc.

Si l'élément de réglage existe, la fonction renvoie sa valeur actuelle; Sinon, il renvoie faux .


Explication des options communes

Pour le codage lié, les options les plus couramment utilisées sont:

 XML_OPTION_TARGET_ENCODING

Cette option représente le codage cible de la sortie d'analyse, qui détermine comment l'analyseur convertit les caractères internes représentés comme des chaînes disponibles en PHP. La valeur par défaut est "UTF-8" , ou "ISO-8859-1" ou "US-ASCII" .


Remarque 1: Comprendre la différence entre le codage cible et le codage source

XML_PARSER_GET_OPTION () Renvoie le codage cible , c'est-à-dire le codage du résultat de sortie de l'analyseur, plutôt que le codage du fichier XML d'origine. L'encodage du fichier XML d'origine est déterminé par la déclaration XML, par exemple:

 <?xml version="1.0" encoding="ISO-8859-1"?>

Même si la déclaration XML est ISO-8859-1, XML_PARSER_GET_OPTION () renverra "UTF-8" tant que vous ne modifierez pas manuellement les paramètres de l'analyseur, car PHP convertira automatiquement le contenu source en l'encodage cible.


Remarque 2: la relation correspondante entre le réglage et l'obtention

Si vous prévoyez de modifier le codage cible par défaut, vous pouvez utiliser xml_parser_set_option () :

 $parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");

Utilisez ensuite xml_parser_get_option () pour vérifier si le paramètre est réussi:

 $encoding = xml_parser_get_option($parser, XML_OPTION_TARGET_ENCODING);
echo "Codage actuel:$encoding";

Veuillez noter que le codage arbitraire n'est pas pris en charge, la définition d'un encodage non pris en charge entraînera l'échec de l'analyseur.


Remarque 3: le flux de fichiers incohérent et l'encodage peuvent provoquer des erreurs

Si le fichier XML Read utilise lui-même un jeu de caractères incompatible avec le codage cible et contient des caractères non ASCII, l'analyseur PHP peut lancer une erreur car les caractères ne peuvent pas être cartographiés. Par conséquent, il est très essentiel de s'assurer que le codage réel du fichier source est cohérent avec la déclaration et compatible avec le codage cible.

Le codage d'origine du fichier peut être détecté via MB_DETECT_ENCODING () , et si nécessaire, utilisez MB_Convert_encoding () pour le convertir en codage cible:

 $xml = file_get_contents("https://gitbox.net/data/sample.xml");
$xml = mb_convert_encoding($xml, "UTF-8", "auto");
$parser = xml_parser_create("UTF-8");
xml_parse($parser, $xml, true);

Note 4: Distinguer l'instance d'analyseur

Chaque instance d'analyseur est indépendante. Lorsque vous obtenez des paramètres, assurez-vous de passer dans la bonne ressource d'analyse . Ceci est particulièrement important lorsque vous travaillez simultanément avec plusieurs fichiers XML ou en encapsulant la logique de l'analyseur dans une classe.


Remarque 5: Aucune relation directe avec l'extension LIBXML

XML_PARSER_GET_OPTION () appartient à l'interface Expat Parser, pas DOM ou simplexml basé sur libxml, et ne peut donc pas être utilisé pour ces extensions. Il ne fonctionne qu'avec des analyseurs de style sax créés avec xml_parser_create () .