Pregunta

Actualmente me encuentro con un problema en el que un elemento regresa de mi archivo xml con una comilla simple. Esto está causando que xml_parse lo divida en varios fragmentos, por ejemplo: ¡Conéctate, estás contratado! Luego se interpreta como 'Conéctate, eres' un objeto, la comilla simple es un segundo, y '¡se contrata!' como un tercero.

Lo que quiero hacer es:

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

Pero eso se sigue rompiendo. Puedo ejecutar un str_replace en lugar de htmlentities y se ejecuta sin problemas, pero no quiere hacerlo con htmlentities.

¿Alguna idea?

Actualización: Según la respuesta de JimmyJ a continuación, he intentado la siguiente solución sin suerte (para su información, hay una respuesta o dos por encima de la publicación vinculada que actualiza el código vinculado directamente):

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

Actualización: Según la siguiente pregunta de tom, las comillas mágicas están / estaban apagadas.

Solución: lo que terminé haciendo para resolver el problema es lo siguiente:

Después de recopilar los datos para cada elemento / publicación / etc, almaceno esos datos en una matriz que luego uso para la salida, luego borro las variables locales utilizadas durante la recopilación. Agregué en un paso que verifica si los datos ya están presentes, y si lo están, los concatené hasta el final, en lugar de sobrescribirlos.

Por lo tanto, si termino con tres partes (como en el ejemplo anterior, sigamos con '¡Conéctate, estás contratado!', pasaré de hacerlo

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

A hacer:

<*>

Esta no es la solución óptima, pero parece estar funcionando.

¿Fue útil?

Solución

¿Por qué no usa algo como simplexml_load_file para analizar su archivo fácilmente?

Otros consejos

Creo que tener comillas mágicas habilitadas puede desordenar el análisis xml a veces, ¿está habilitado? Puede deshabilitar esto en tiempo de ejecución usando

set_magic_quotes_runtime(0);

Editar: esto puede no ser relevante si la fuente no se publica ni se publica, pero leí en el manual de PHP que podría causar un comportamiento extraño de todos modos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top