Vra

Ek is tans loop in 'n probleem waar 'n element terug kom uit my xml lêer met 'n enkele aanhaling in dit. Dit veroorsaak xml_parse om dit op te breek in verskeie stukke, byvoorbeeld: Kry Wired, jy gehuur! Word dan enterpreted as 'Kry Wired, Jy' as een voorwerp, die enkele aanhaling 'n tweede, en 'weer gehuur! " as 'n derde.

Wat ek wil doen, is:

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

Maar dit hou breek. Ek kan 'n str_replace hardloop in plaas van htmlentities en dit loop sonder probleem, maar wil nie met htmlentities.

Enige idees?

Update: Soos per reaksie JimmyJ se onder, het ek die volgende oplossing met geen geluk probeer (FYI is daar 'n reaksie of twee bo die gekoppelde post dat die kode wat direk gekoppel is werk):

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;
        }

Update: Soos per vraag Tom se onder, magie aanhalings is / was inderdaad afgeskakel

.

Oplossing: Wat ek beland doen om die probleem op te los is die volgende:

Na die bymekaarbring van die data vir elke individuele item / post / ens, ek slaan dat data om 'n skikking wat ek later vir uitvoer gebruik, dan duidelik dat die plaaslike veranderlikes gebruik tydens versameling. Ek het ook in 'n stap wat tjeks as data is reeds teenwoordig, en as dit is, ek koppel dit aan die einde, eerder as om te vervang nie.

So, as ek eindig met drie stukke (soos hierbo, laat ons vashou aan 'Kry Wired, jy gehuur! ", Ek sal dan gaan om dit te doen

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

Om te doen:

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

Dit is nie die optimale oplossing, maar blyk te wees werk.

Was dit nuttig?

Oplossing

Hoekom doen jy nie iets soos simplexml_load_file gebruik om jou lêer maklik ontleed?

Ander wenke

Ek dink dat magie aanhalings in staat gestel kan gemors xml parsing soms - is dit in staat gestel ?. Jy kan dit tydens looptyd te skakel deur gebruik te maak

set_magic_quotes_runtime(0);

Edit: dit mag nie betrokke wees as die bron nie plaas of kry, maar ek lees in die PHP handleiding wat dit vreemd gedrag in elk geval kan veroorsaak

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top