문제

현재 XML 파일에서 요소가 단일 인용문으로 돌아 오는 문제가 발생하고 있습니다. 이로 인해 XML_PARSE가 여러 덩어리로 분해하게됩니다. 예 : 유선을 잡으십시오. 그런 다음 '유선, 당신은 하나의 객체, 단일 인용문은 두 번째이며'다시 고용되었습니다! ' 세 번째로.

내가하고 싶은 것은 :

while($data = fread($fp, 4096)){
        if(!xml_parse($xml_parser, htmlentities($data,ENT_QUOTES), feof($fp))) {
            break;
        }
    }

그러나 그것은 계속 깨지고 있습니다. 나는 htmlentities 대신에 str_replace를 실행할 수 있으며 문제없이 실행되지만 htmlentities를 원하지 않습니다.

어떤 아이디어?

업데이트:아래의 Jimmyj의 응답에 따르면, 나는 운이없는 다음 솔루션을 시도했습니다 (fyi는 직접 연결된 코드를 업데이트하는 링크 된 게시물 위에 응답이 있습니다).

function XMLEntities($string)
    {
        $string = preg_replace('/[^\x09\x0A\x0D\x20-\x7F]/e', '_privateXMLEntities("$0")', $string);
        return $string;
    }

    function _privateXMLEntities($num)
    {
    $chars = array(
        39  => ''',
        128 => '€',
        130 => '‚',
        131 => 'ƒ',
        132 => '„',
        133 => '…',
        134 => '†',
        135 => '‡',
        136 => 'ˆ',
        137 => '‰',
        138 => 'Š',
        139 => '‹',
        140 => 'Œ',
        142 => 'Ž',
        145 => '‘',
        146 => '’',
        147 => '“',
        148 => '”',
        149 => '•',
        150 => '–',
        151 => '—',
        152 => '˜',
        153 => '™',
        154 => 'š',
        155 => '›',
        156 => 'œ',
        158 => 'ž',
        159 => 'Ÿ');
        $num = ord($num);
        return (($num > 127 && $num < 160) ? $chars[$num] : "&#".$num.";" );
    }
if(!xml_parse($xml_parser, XMLEntities($data), feof($fp))) {
            break;
        }

업데이트: 아래의 Tom의 질문에 따라, 마법의 인용문은 실제로 꺼졌습니다.

해결책: 문제를 해결하기 위해 내가 한 일은 다음과 같습니다.

각 개별 항목/게시물/등에 대한 데이터를 수집 한 후 해당 데이터를 나중에 출력에 사용하는 배열에 저장 한 다음 컬렉션 중에 사용되는 로컬 변수를 지 웁니다. 데이터가 이미 존재하는지 확인하는 단계를 추가했으며, 그렇다면, 그것을 덮어 쓰지 않고 끝까지 연결합니다.

그래서, 내가 세 개의 덩어리로 끝나면 (위와 같이, '유선을 잡아라, 당신은 고용되었습니다!'

$x = 'Get Wired, You'
$x = "'"
$x = 're Hired!'

하기 위해 :

$x = 'Get Wired, You' . "'" . 're Hired!'

이것은 최적의 솔루션이 아니지만 작동하는 것으로 보입니다.

도움이 되었습니까?

해결책

simplexml_load_file과 같은 것을 사용하여 파일을 쉽게 구문 분석하지 않겠습니까?

다른 팁

마법 인용문이 활성화되어있는 경우 가끔 XML 구문 분석을 엉망으로 만들 수 있다고 생각합니다. 런타임을 사용하여이를 비활성화 할 수 있습니다

set_magic_quotes_runtime(0);

편집 : 소스가 게시되거나 얻지 못한 경우 관련이 없을 수도 있지만 PHP 매뉴얼에서 어쨌든 홀수 동작을 일으킬 수 있다는 것을 읽었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top