XML_PARSER_GET_OPTION ()는 특정 XML 파서의 설정을 얻는 데 사용됩니다. 기능 프로토 타입은 다음과 같습니다.
mixed xml_parser_get_option(resource $parser, int $option)
여기서 $ parser 는 xml_parser_create () 또는 관련 함수에 의해 생성 된 파서 리소스이며 $ 옵션은 xml_option_target_encoding , xml_option_case_folding 등과 같은 옵션 상수입니다.
설정 항목이 존재하면 함수는 현재 값을 반환합니다. 그렇지 않으면 false를 반환합니다.
코딩 관련의 경우 가장 일반적으로 사용되는 옵션은 다음과 같습니다.
XML_OPTION_TARGET_ENCODING
이 옵션은 파서 출력의 대상 인코딩을 나타내며, 이는 Parser가 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 인 경우에도 PHP가 소스 컨텐츠를 대상 인코딩 으로 자동 변환하기 때문에 Parser 설정을 수동으로 변경하지 않는 한 "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이 아닌 국외 파서 인터페이스에 속하므로 이러한 확장에 사용할 수 없습니다. XML_PARSER_CREATE () 로 만든 색소폰 스타일 파서에서만 작동합니다.