PHP의 XML_PARSE () 함수를 사용하여 XML 데이터를 구문 분석 할 때 XML이 UTF-8 인코딩되어 부적절하게 처리되면, 구문 분석 된 컨텐츠가 나타날 수 있습니다. 이 문제는 XML 파일 헤더가 UTF-8 인코딩을 선언 할 때 일반적이지만 실제 읽기 또는 처리 중에 인코딩이 올바르게 인식되거나 변환되지 않습니다. 이 기사는 문제의 원인을 소개하고 특정 솔루션을 제공합니다.
XML_PARSE () 는 PHP의 국외 파서의 인터페이스입니다. 국외 거주자 자체는 문자 인코딩에 매우 엄격하며 입력 XML 문자열 인코딩, 특히 UTF-8이 명확하고 일관성이 있어야합니다. 제공된 XML 데이터가 UTF-8으로 선언되지만 그렇지 않은 경우 또는 PHP가 이러한 데이터를 처리 할 때 잘못된 인코딩 변환을 수행하는 경우 차량 코드가 나타납니다.
또 다른 일반적인 문제는 외부에서 XML 파일 (예 : URL을 통한 페치)에서 XML 파일을 읽을 때 적절한 스트림 인코딩이 UTF-8으로 설정되거나 변환되지 않아 인코딩이 일치하지 않는다는 것입니다.
<?php
$xml = file_get_contents("https://m66.net/data/sample.xml");
$parser = xml_parser_create(); // 기본적으로 사용됩니다 ISO-8859-1
xml_parse($parser, $xml, true);
echo "성공적인 분석";
xml_parser_free($parser);
?>
위의 코드를 실행할 수 있지만 Sample.xml 이 UTF-8 인코딩되면 구문 분석 중에 직접 실패하거나 실패 할 수 있습니다.
XML_PARSER_CREATE () 의 매개 변수를 사용하여 인코딩을 UTF-8으로 지정하여 구문 분석기에 올바른 인코딩을 사용하도록 지시 할 수 있습니다.
<?php
$xml = file_get_contents("https://m66.net/data/sample.xml");
$parser = xml_parser_create('UTF-8'); // 명시 적으로 지정합니다 UTF-8
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
xml_parse($parser, $xml, true);
echo "성공적인 분석";
xml_parser_free($parser);
?>
이 방법은 파서가 UTF-8에 따라 데이터를 읽고 중국어 또는 다른 멀티 바이트 문자를 포함하는 XML 컨텐츠를 올바르게 처리 할 수 있도록합니다.
외부 소스 (예 : 인터페이스 또는 원격 XML 파일)에서 얻은 데이터가 실제로 UTF-8인지 확실하지 않은 경우 mb_detect_encoding () 또는 iconv ()를 사용하여 확인하거나 변환 할 수 있습니다.
<?php
$xml = file_get_contents("https://m66.net/data/sample.xml");
// 감지하고 변환하십시오 UTF-8
if (mb_detect_encoding($xml, 'UTF-8', true) === false) {
$xml = iconv('GBK', 'UTF-8', $xml); // 원래 인코딩을 적절하게 수정하십시오
}
$parser = xml_parser_create('UTF-8');
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
xml_parse($parser, $xml, true);
echo "성공적인 분석";
xml_parser_free($parser);
?>
이는 특히 타사 플랫폼이나 다른 시스템의 데이터를 처리 할 때 일관되지 않은 인코딩 문제를 피할 수 있습니다.
XML 파일의 헤더 선언에 다음 내용이 포함되어 있는지 확인하십시오.
<?xml version="1.0" encoding="UTF-8"?>
UTF-8이 선언되었지만 실제 인코딩이 UTF-8이 아닌 경우, PHP에서 구문 분석을 강요 받으려면 차량화 된 코드 또는 구문 분석 실패가 발생할 수 있습니다. 이 시점에서 소스 파일 인코딩은 먼저 수정하거나 PHP를 사용하여 변환해야합니다.