XML_PARSER_GET_OPTION()は、特定のXMLパーサーの設定を取得するために使用されます。関数プロトタイプは次のとおりです。
mixed xml_parser_get_option(resource $parser, int $option)
$パーサーは、 XML_PARSER_CREATE()または関連する関数によって作成されたパーサーリソースであり、 $オプションは、 XML_OPTION_TARGET_ENCODING 、 XML_OPTION_CASE_FOLDINGなど、取得するオプション定数です。
設定項目が存在する場合、関数は現在の値を返します。それ以外の場合、それはfalseを返します。
関連するコーディングの場合、最も一般的に使用されるオプションは次のとおりです。
XML_OPTION_TARGET_ENCODING
このオプションは、パーサー出力のターゲットエンコーディングを表します。これにより、パーサーがPHPで利用可能な文字列として表される内部文字を変換する方法を決定します。デフォルト値は「UTF-8」 、または「ISO-8859-1」または「US-ASCII」です。
XML_PARSER_GET_OPTION()ターゲットエンコード、つまり、元のXMLファイルのエンコードではなく、パーサー出力結果のエンコードを返します。元のXMLファイルのエンコードは、XML宣言によって決定されます。
<?xml version="1.0" encoding="ISO-8859-1"?>
XML宣言がISO-8859-1であっても、 XML_PARSER_GET_OPTION()は、PHPがソースコンテンツをターゲットエンコーディングに自動的に変換するため、パーサー設定を手動で変更しない限り、「UTF-8」を返します。
デフォルトのターゲットエンコーディングを変更する場合は、 XML_PARSER_SET_OPTION()を使用できます。
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
次に、 xml_parser_get_option()を使用して、設定が成功したかどうかを確認します。
$encoding = xml_parser_get_option($parser, XML_OPTION_TARGET_ENCODING);
echo "現在のエンコーディング:$encoding";
任意のエンコードはサポートされていないことに注意してください。サポートされていないエンコードを設定すると、パーサーが失敗します。
読み取りXMLファイル自体が、ターゲットエンコーディングと矛盾し、非ASCII文字を含む文字セットを使用する場合、文字をマッピングできないため、PHPパーサーにエラーが発生する場合があります。したがって、ソースファイルの実際のエンコードが宣言と一致し、ターゲットエンコードと互換性があることを確認することが非常に重要です。
ファイルの元のエンコードは、 mb_detect_encoding()を介して検出できます。必要に応じて、 mb_convert_encoding()を使用してターゲットエンコードに変換します。
$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);
各パーサーインスタンスは独立しています。設定を取得するときは、正しいパーサーリソースを渡すことを確認してください。これは、複数のXMLファイルを同時に操作したり、クラス内のパーサーロジックをカプセル化する場合に特に重要です。
XML_PARSER_GET_OPTION()は、LIBXMLベースのDOMまたはSimplexMLではなくExpat Parserインターフェイスに属しているため、これらの拡張に使用することはできません。 XML_PARSER_CREATE()で作成されたSAXスタイルのパーサーでのみ動作します。