Social Software powered by Instant Communities
Springe direkt: zur Navigationzum Inhaltzur Sidebar
May19

xml_set_character_data_handler: Beware of chunks!

gepostet von Johannes Schmidt

Die Behandlung von Character Data mit PHPs XML Parser (basierend auf James Clarks expat) weist eine undokumentierte Eigenart auf. Die jeweils definierte Callback-Funktion für Character Data, z. B.


xml_set_character_data_handler($this->sax, 'data');
...
private function data($sax, $data) {
$this->data .= (string) $data;
}

wird Datengrößen-bedingt mehrfach gerufen (siehe http://www.php.net/manual/en/function.xml…).

Ich konnte das Splitting-Phänomen für CDATA-Sections sowie “einfache” Strings, die Umlaute enthalten, wie folgt nachvollziehen:

CDATA-Sections: “”, Inhalt CDATA-Section, “”. Also drei Iterationen mit dem Muster [empty], [Daten], [empty].
Einfache Strings mit Umlauten, z. B. “Hallö Günther”: “”, “”, “”, “”, “”, “”, “Hall”, “ö Günther”. Also acht Iterationen mit diesem Muster: Alles vor dem ersten Umlaut wird in der vorletzten Iteration erfasst, der Rest in der letzten.

Ohne Concatenation-Operator (.) in der Wertezuweisung wird man hier also vergeblich auf den vollständigen Zeichendaten-Inhalt warten. Das obige Beispiel ist bereits entsprechend korrigiert.

Keine Kommentare

Kommentare zu diesem Beitrag als RSS 2.0 feed.

Kommentar abgeben

Folgendes HTML ist erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

* Pflichtfelder

Creative Commons License
This work is licensed under a
Creative Commons Attribution-Share Alike 2.5 License.
t8d blogged mit WordPress