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)
où $ 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 .
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" .
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.
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.
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);
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.
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 () .