현재 위치: > 최신 기사 목록> XML_PARSE에서 유효하지 않은 XML 태그를 처리하고 수정하는 방법

XML_PARSE에서 유효하지 않은 XML 태그를 처리하고 수정하는 방법

M66 2025-04-28

PHP의 XML_PARSE () 함수를 사용하여 XML 데이터를 구문 분석 할 때, 유효하지 않거나 오염 된 XML 태그로 인해 구문 분석이 종종 실패합니다. 이 상황은 사용자가 입력 한 XML 문자열 또는 신뢰할 수없는 소스 (예 : 제 3자가 업로드)의 데이터에서 일반적입니다. 이 기사는 이러한 오류를 우아하게 처리하는 방법을 설명하고 구문 분석 오류를 피하기 위해 일반적인 문제를 자동으로 해결하려고 시도합니다.

1. XML_PARSE () 의 작동 방식을 이해하십시오

XML_PARSE ()는 이벤트 중심 방식으로 XML 데이터를 구문 분석하는 PHP의 XML 파서 (국외 라이브러리 기반)의 일부입니다.

 $parser = xml_parser_create();
xml_parse($parser, $xmlString, true);
xml_parser_free($parser);

$ XMLString 의 XML이 유효하지 않으면 함수가 False를 반환하고 xml_get_error_code ()xml_error_string () 을 통해 자세한 오류 정보를 얻을 수 있습니다.

2. 일반적인 유효하지 않은 XML 문제

  1. 라벨이 닫히지 않았습니다.

     <note><to>Tove</to><from>Jani</note>
    
  2. 특수 문자는 탈출되지 않습니다.

     <message>5 < 10 & 7 > 3</message>
    
  3. 무단 문자 또는 불법 인코딩

  4. 잘못된 중첩 구조

3. 자동 수리 전략

비표준 또는 부패한 XML을 처리 해야하는 경우 일부 전략을 사용하여 전처리 또는 고칠 수 있습니다.

1. libxml 에서 제공 한 허위 구문 분석을 사용해보십시오.

PHP의 DomDocument 클래스는 XML을로드 할 때 오류보고를 비활성화 할 수 있으므로 결함이 발생하지 않으려 고합니다.

 libxml_use_internal_errors(true);

$doc = new DOMDocument();
$success = $doc->loadXML($xmlString);

if (!$success) {
    foreach (libxml_get_errors() as $error) {
        echo "제안을 수리하십시오:" . $error->message . "\n";
    }
    libxml_clear_errors();
}

이 방법은 고정되지 않았지만 무엇이 잘못되었는지 알려줄 수 있습니다.

2. 일반적인 문제 (예 : 탈출 문자)를 수동으로 수정합니다.

XML의 구조를 알고 있다면 일반 또는 문자열 교체로 고정 할 수 있습니다.

 function sanitizeXml($xml) {
    // 불법 교체 & 성격
    $xml = preg_replace('/&(?!amp;|lt;|gt;|quot;|apos;)/', '&amp;', $xml);

    // 다른 규칙은 필요에 따라 완료 될 수 있습니다
    return $xml;
}

3. 오류 및 다운 그레이드 처리

로그 저장, 데이터 상태 표시 등과 같이 실패하면 XML 파싱이 함수 및 다운 그레이드 처리를 래핑 할 수 있습니다.

 function safeXmlParse($xmlString) {
    $parser = xml_parser_create();

    if (!xml_parse($parser, $xmlString, true)) {
        $error = xml_error_string(xml_get_error_code($parser));
        $line = xml_get_current_line_number($parser);
        error_log("XML분석이 실패했습니다: $error at line $line");

        // 선택 과목:관리자에게 알리거나 레코드를 건너 뛰십시오
        return false;
    }

    xml_parser_free($parser);
    return true;
}

4. 실제 사례

URL에서 XML 데이터를 얻는다 고 가정 해보십시오 https://api.m66.net/feed :

 $url = "https://api.m66.net/feed";
$xmlData = file_get_contents($url);
$xmlData = sanitizeXml($xmlData);

if (!safeXmlParse($xmlData)) {
    echo "이것을 구문 분석 할 수 없습니다 XML 데이터,오류 로그인。\n";
} else {
    echo "XML 성공적인 분석!\n";
}

5. 팁 : 외부 도구를 사용한 전처리

특히 혼란스러운 XML을 위해 Tidy , Xmllint 또는 Python의 BeautifulSoup 과 같은 외부 도구를 사용하여 정리 한 다음 PHP로 가져와 처리 할 수 ​​있습니다.

요약

XML 구문 분석 오류를 처리하는 핵심은 전처리 + 오류 허용 오류 + 결함 공차 복구 메커니즘에 있습니다. XML_PARSE () 는 기본이지만 엄격한 XML 구문 분석 방법이지만 DOM, LIBXML, 수동 수리 전략 및 기타 방법과 불규칙한 XML의 호환성을 크게 향상시킬 수 있습니다.

다음에 "신비한 XML 구문 분석 실패"에 직면 할 때, 당신은이 방법들을 시도 할 수도 있습니다!