Frage

Ich bin derzeit in ein Problem, bei dem ein Element mit einem einzigen Zitat aus meiner XML-Datei kommt wieder drin. Dies verursacht xml_parse es zu brechen in mehrere Stücke, Beispiel: Get Wired, Ihr seid eingestellt! Wird dann enterpreted wie ‚Get Wired, Sie‘ ist ein Objekt, das Apostroph ein zweites zu sein, und ‚re Hired!‘ als ein Drittel.

Was ich tun möchte, ist:

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

Aber das hält brechen. Ich kann einen str_replace anstelle von htmlentities laufen und es läuft ohne Probleme, aber will nicht mit htmlentities.

Irgendwelche Ideen?

Update: Wie pro JimmyJ Antwort unten, ich habe folgende Lösung ohne Glück versucht (FYI gibt es eine Antwort oder zwei oben verlinkten Beitrag, der den Code aktualisieren, die direkt verbunden ist):

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: Wie pro tom Frage unten ist magic quotes / wurde in der Tat ausgeschaltet

.

Lösung: Was ich tun endete das Problem zu lösen, ist die folgende:

Nachdem die Daten für jeden einzelnen Punkt zu sammeln / Post / etc, ich speichere, dass Daten zu einem Array, das ich später für die Ausgabe verwende, dann die lokalen Variablen während des Sammelns verwendet löschen. Ich habe in einem Schritt, wenn Daten überprüft bereits vorhanden ist, und wenn es ist, ich verketten es bis zum Ende, anstatt sie zu überschreiben.

Also, wenn ich mit drei Stücken (wie oben landen, bleiben sie mit ‚Wired holen Sie eingestellt!‘, Werde ich dann zu tun, gehe

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

Zu tun:

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

Dies ist nicht die optimale Lösung, aber scheint zu funktionieren.

War es hilfreich?

Lösung

Warum verwenden Sie nicht so etwas wie simplexml_load_file Ihre Datei einfach zu analysieren?

Andere Tipps

Ich denke, mit magic quotes kann mess up xml aktiviert Parsen manchmal - ist diese Option aktiviert ?. Sie können diese zur Laufzeit deaktivieren mit

set_magic_quotes_runtime(0);

Edit: nicht relevant sein kann, wenn die Quelle der Post nicht oder bekommen, aber ich in dem PHP-Handbuch zu lesen, dass es ohnehin merkwürdiges Verhalten verursachen könnte

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top