Hi.
Moin!
function character_handler($xml, $data)
{
if ($GLOBALS['tag'] != 'titel') return;
$GLOBALS['titel'][] = $data;An dieser Stelle legst du ein potentiell mehrelementiges Array an, welches Teile des Inhalts des titel-Elements enthält. Nämlich für jedes geparste Bruchstück, was SAX ausspuckt, eines.
Das entspricht vollkommen der Funktionsweise von SAX.
»»
Ja, so soll es auch sein. Jeder Textknoten von den titel-Tags soll einen eigenen Eintrag in dem Array $titel haben. Aber es wird bei jedem Umlaut eine neues Ereignis für character_handler ausgelöst, was keinen Sinn macht. In Deinen Worten drei statt zwei Bruchstücken:
<titel>Entität</titel>
<titel>Tabelle</titel>
soll logischerweise zwei Ereignisse auslösen, es sind aber drei. Dabei wird das Array natürlich zu groß, statt zwei Einträgen drei.
}
Abgesehen davon halte ich deine Vorgehensweise, über $GLOBALS auf globale Variablen zuzugreifen, für extrem böse!
Klar. Es geht hier aber nur um die Funktion von SAX.
Außerdem: Dein Code enthält nirgendwo den Ausgabeteil. In dem wird vermutlich der Grund für den zerhauenen Umlaut drinstehen.
Den habe ich, weil er nichts zur Sache tut, weggelassen. Aber daran liegt es garantiert nicht:
foreach($titel as $titel)
echo $titel;