tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
445
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    sHortyaka sHortyaka ist offline Grünschnabel
    Registriert seit
    Jul 2004
    Beiträge
    1
    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-Code:
    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($parserXML_OPTION_CASE_FOLDINGFALSE);
    xml_parser_set_option($parserXML_OPTION_TARGET_ENCODING"UTF-8");
    xml_parser_set_option($parserXML_OPTION_SKIP_WHITE1);
                          
    if(!(
    $handle fopen($file"r"))){
        die(
    "Datei nicht gefunden.");
    }
    echo 
    "<table border=1>";
    while (
    $daten fread($Handle4096)){
        if (!
    xml_parse($parser$datenfeof($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

    P.S. Hier eine Beispiel-XML.

    Ich hoffe jemand kann mir bei diesem Mysterium weiterhelfen! Vielen Dank
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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 :
    1
    
    $parser = xml_parser_create('UTF-8');
     

Ähnliche Themen

  1. FF verschluckt Rahmen
    Von ToboTheRibbler im Forum CSS
    Antworten: 10
    Letzter Beitrag: 26.04.10, 22:10
  2. php include - function verschluckt was?
    Von lanfire im Forum PHP
    Antworten: 13
    Letzter Beitrag: 03.05.09, 19:49
  3. csv verschluckt Null
    Von callis2 im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 28.08.07, 20:07
  4. Blätterfunktion verschluckt Bilder
    Von StonE12 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 22.02.07, 00:40
  5. getURL verschluckt URL teilweise
    Von Veränderung im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 21.01.06, 16:07