Question

Je suis actuellement confronté à un problème où un élément revient de mon fichier xml avec une seule citation. Cela provoque xml_parse de le diviser en plusieurs morceaux, par exemple: Get Wired, You're Lired! Est ensuite interprété comme "Get Wired, You" étant un objet, la citation simple étant une seconde, et "re Hired!" en tiers.

Ce que je veux faire, c'est:

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

Mais ça continue à se casser. Je peux exécuter str_replace à la place de htmlentities et cela fonctionne sans problème, mais je ne veux pas utiliser htmlentities.

Des idées?

Mise à jour: Conformément à la réponse de JimmyJ ci-dessous, j’ai tenté la solution suivante sans succès (une réponse ou deux apparaît au-dessus du message lié qui met à jour le code lié directement):

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

Mise à jour: Comme indiqué dans la question ci-dessous, Magic quotes est / était bien désactivé.

Solution: Voici ce que j'ai finalement fait pour résoudre le problème:

Après avoir collecté les données pour chaque élément individuel / article / etc, je stocke ces données dans un tableau que j'utilise ultérieurement pour la sortie, puis efface les variables locales utilisées lors de la collecte. J'ai ajouté dans une étape qui vérifie si les données sont déjà présentes et, le cas échéant, je les concaténerais à la fin, plutôt que de les écraser.

Donc, si je me retrouve avec trois morceaux (comme ci-dessus, restons-en avec 'Get Wired, vous êtes embauché!'), je passerai ensuite à l'action

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

Pour faire:

<*>

Ce n'est pas la solution optimale, mais semble fonctionner.

Était-ce utile?

La solution

Pourquoi n'utilisez-vous pas quelque chose comme simplexml_load_file pour analyser facilement votre fichier?

Autres conseils

Je pense que l'activation des guillemets magiques peut gâcher l'analyse xml - est-ce activé??. Vous pouvez le désactiver au moment de l'exécution à l'aide de

set_magic_quotes_runtime(0);

Éditer: cela peut ne pas être pertinent si la source n'est pas post ou get, mais j'ai lu dans le manuel PHP que cela pourrait quand même causer un comportement étrange

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top