Domanda

Attualmente sto riscontrando un problema in cui un elemento sta tornando dal mio file XML con una sola citazione in esso. Questo sta causando la suddivisione di xml_parse in più blocchi, ad esempio: Get Wired, You're Hired! Viene quindi interpretato come 'Get Wired, You' essendo un oggetto, la singola citazione è un secondo e 're Hired!' come terzo.

Quello che voglio fare è:

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

Ma questo continua a rompersi. Posso eseguire str_replace al posto di htmlentities e funziona senza problemi, ma non vuole farlo con htmlentities.

Qualche idea?

Aggiornamento: Secondo la risposta di JimmyJ di seguito, ho tentato senza successo la seguente soluzione (FYI c'è una risposta o due sopra il post collegato che aggiorna il codice che è collegato direttamente):

function XMLEntities($string)
    {
        $string = preg_replace('/[^\x09\x0A\x0D\x20-\x7F]/e', '_privateXMLEntities("
$x = 'Get Wired, You'
$x = "'"
$x = 're Hired!'
")', $string); return $string; } function _privateXMLEntities($num) { $chars = array( 39 => '&#39;', 128 => '&#8364;', 130 => '&#8218;', 131 => '&#402;', 132 => '&#8222;', 133 => '&#8230;', 134 => '&#8224;', 135 => '&#8225;', 136 => '&#710;', 137 => '&#8240;', 138 => '&#352;', 139 => '&#8249;', 140 => '&#338;', 142 => '&#381;', 145 => '&#8216;', 146 => '&#8217;', 147 => '&#8220;', 148 => '&#8221;', 149 => '&#8226;', 150 => '&#8211;', 151 => '&#8212;', 152 => '&#732;', 153 => '&#8482;', 154 => '&#353;', 155 => '&#8250;', 156 => '&#339;', 158 => '&#382;', 159 => '&#376;'); $num = ord($num); return (($num > 127 && $num < 160) ? $chars[$num] : "&#".$num.";" ); } if(!xml_parse($xml_parser, XMLEntities($data), feof($fp))) { break; }

Aggiornamento: secondo la domanda di Tom di seguito, le virgolette magiche sono / sono state effettivamente disattivate.

Soluzione: quello che ho finito per risolvere il problema è il seguente:

Dopo aver raccolto i dati per ogni singolo articolo / post / ecc., li memorizzo in un array che utilizzo in seguito per l'output, quindi deseleziono le variabili locali utilizzate durante la raccolta. Ho aggiunto un passaggio che verifica se i dati sono già presenti e, in caso affermativo, li concateno fino alla fine, anziché sovrascriverli.

Quindi, se finisco con tre pezzi (come sopra, rimaniamo con 'Get Wired, You're Hired!', poi passerò dal fare

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

Per fare:

<*>

Questa non è la soluzione ottimale, ma sembra funzionare.

È stato utile?

Soluzione

Perché non usi qualcosa come simplexml_load_file per analizzare facilmente il tuo file?

Altri suggerimenti

Penso che abilitare le virgolette magiche a volte possa rovinare l'analisi xml - è abilitato ?. Puoi disabilitarlo in fase di esecuzione usando

set_magic_quotes_runtime(0);

Modifica: questo potrebbe non essere rilevante se la fonte non è post o get, ma ho letto nel manuale di PHP che potrebbe comunque causare comportamenti strani

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top