XML-Parser verschluckt Umlaute

sHortyaka

Grünschnabel
Guten Abend zusammen!

Habe einen XML-Parser, der eine XML einliest und die Daten in eine DB schreibt bzw. sie zum testen erstmal ausgibt. Hier der Code zum ausgeben der Daten:
PHP:
function se_handler($parser, $element, $attr){
global $doit;
    switch ($element){
        case "Row":
        echo "<tr>";
        break;
        case "Data":
        echo "<td>";
	$doit = true;
        break;
    }
}

function ee_handler($parser, $element){
    switch ($element){
        case "Row":
        echo "</tr>";
        break;
        case "Data":
        echo "</td>";
        break;
    }
}

function char_handler($parser, $data){
    global $doit;
    if($doit){
        echo $Data;
        $doit = false;
    }
}

$doit = false;

$file = "xml_example.xml";
$parser = xml_parser_create();

xml_set_element_handler($parser, "se_handler", "ee_handler");
xml_set_character_data_handler($parser, "char_handler");

xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, FALSE);
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
                      
if(!($handle = fopen($file, "r"))){
    die("Datei nicht gefunden.");
}
echo "<table border=1>";
while ($daten = fread($Handle, 4096)){
    if (!xml_parse($parser, $daten, feof($handle))){
        die("XML parser error.");
    }
}
echo "</table>";

xml_parser_free($parser);

Ich habe die variable $doit deklariert, die genau dann true ist, wenn der Parser über ein <Data>-Tag läuft - Dadurch werden nur die <Data>-Daten ausgegeben und nicht etwa irgendwelche Rudimente, die Excel mit in die XML gespeichert hat, ich aber garnicht brauche (siehe if() im char_handler).

Jetzt zum Problem: Wenn nun ein String wie zum Beispiel "Entlüftungsschlauch" gelesen wird, gibt er nur "Entl" aus und lässt "üftungsschlauch" weg, splittet den string also quasi vor dem Umlaut und gibt nur den ersten Teil aus.

Meine Beobachtung: Wenn ich das $doit und die if() im char_handler raus nehme, werden die String mit Umlauten korrekt ausgegeben. Problem ist dann halt, dass der ganze mist den excel mit ins Dokument geschrieben hat dann auch ausgegeben wird (z.b. Author, Erstellungsdatum usw).

Ich bin da echt etwas ratlos:confused:

P.S. Hier eine Beispiel-XML.

Ich hoffe jemand kann mir bei diesem Mysterium weiterhelfen! Vielen Dank;)
 
Moin,

da dies offensichtlich ein Zeichensatz-Problem ist, folgende Fragen:

Wie ist das Skript mit deinem Parser codiert?
Welche PHP-Version ist am Laufen?

Vorschlag auf gut Glück:
1.Skript in UTF-8 codieren.
...und
2. diesen charset auch beim Erstellen des Parser angeben:
Code:
$parser = xml_parser_create('UTF-8');
 
Zurück