Ankündigung

Einklappen
Keine Ankündigung bisher.

XML-Parser encoding-Problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • XML-Parser encoding-Problem

    Nabend Leute!

    Hab mir einen XML-Parser gebastelt um XMLs in eine DB zu schrieben. Der parser läuft wunderbar - bis der Parser auf einen Umlaut stößt. Aus "Zwölfkantschraube" wird dann "Zw", der Rest des Strings wird also vor dem Umlaut abgeschnitten.

    Trotz
    PHP-Code:
    xml_parser_set_option($parserXML_OPTION_TARGET_ENCODING"UTF-8"); 
    geht es irgendwie nicht ... In der XML selber stand nix von Encoding, hab also mal <?xml version="1.0" encoding="utf-8"?> oben eingetragen - Trotzdem gehts nicht.

    Kennt jemand das Problem und hat es schonmal gelöst? Würde mich sehr freuen!

    Vielen Dank

  • #2
    Zitat von sandemann Beitrag anzeigen
    Hab mir einen XML-Parser gebastelt um XMLs in eine DB zu schrieben. Der parser läuft wunderbar - bis der Parser auf einen Umlaut stößt. Aus "Zwölfkantschraube" wird dann "Zw", der Rest des Strings wird also vor dem Umlaut abgeschnitten.
    Hast du erst mal genau untersucht, ob das Problem beim Parser liegt - oder bei der Datenbank bzw. beim Eintragen in diese ...?
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      Wenn ich die Daten per echo ausgebe und nicht in die DB schreibe hab ich das gleiche problem.
      Folgendermaßen läufts dann ab:
      PHP-Code:
      $parser xml_parser_create();
      xml_parser_set_option($parserXML_OPTION_TARGET_ENCODING"UTF-8");
      xml_parser_set_option($parserXML_OPTION_CASE_FOLDING0);
      xml_parser_set_option($parserXML_OPTION_SKIP_WHITE1);
      //...
      //...
      $file "testxml.xml";
      if (
      $stream fopen($file"r")){
          while (
      $data fread($stream4096)){
              
      $parsed xml_parse($parser$datafeof($stream));
              
      //..
              //..
          
      }

      Hoffe das hilft weiter... Und danke Dir für die schnelle Antwort

      Kommentar


      • #4
        Zitat von sandemann Beitrag anzeigen
        Wenn ich die Daten per echo ausgebe
        ... dann machst du das in einem Dokument, das auch als UTF-8 interpretiert wird?


        Wenn das Encoding der XML-Datei nicht UTF-8 ist, müsste es explizit angegeben sein. Wenn es das nicht ist, ist das XML fehlerhaft.
        [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

        Kommentar


        • #5
          ich weiß ehrlichgesagt nicht, ob es so interpretiert wird. Wo finde ich das denn heraus?

          Hier unter "SAX: Wie verarbeite ich XML individuell?" ist ein script, dass meinem doch sehr ähnelt, allerdings auch funktioniert. Wo liegt denn jetzt der Unterschied? ich habe Tomaten auf den Augen glaub ich^^

          Kommentar


          • #6
            Ich habe es gerade zumindest geschafft, das problem einzugrenzen!
            Folgendes: Da ich nur gewisse Daten-Tags aus meiner XML auslesen will, habe ich eine variable deklariert, die genau dann true ist, wenn eins dieser Tags geöffnet wird. Das ganze sieht so aus:
            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
            Entweder: Wenn ich das $doit rausnehme wird "Entlüftungsschlauch" korrekt angezeigt, ABER es werden auch Daten ausgegeben die ich nicht haben will.
            Oder: Wenn ich $doit drin lasse werden nur die Daten ausgegeben, die ich tatsächlich haben, ABER "Entlüftungsschlauch" wird zu "Entl".

            Scheinbar hat es garnichts mit dem Encoding zu tun... Woran kann das denn dann liegen?

            Kommentar


            • #7
              Kannst du bitte mal ein minimales Beispiel-XML bereitstellen, an dem sich das Problem nachvollziehen lässt?
              [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

              Kommentar


              • #8
                Gern - Man sieht dann gleich, was Excel noch so alles in eine XML mit rein packt (eben die Daten, die ich in meinem Script nicht ausgeben bzw. in die DB schreiben will).

                Kommentar


                • #9
                  Ich hab damit mal ein wenig rumgespielt ..
                  Kannst Du mal testen ob folgendes die Umlaute bei Dir richtig darstellt ?

                  PHP-Code:
                  $fname './xml_example.xml';
                      
                  $document =  new SimpleXmlIterator($fnamenulltrue);
                      
                  $data $document[0]->Worksheet->Table->Row;
                      
                      for( 
                  $data->rewind(); $data->valid(); $data->next()){
                          
                  print_r(mb_convert_encoding((string) $data->current()->Cell[0]->Data,'auto' 'UTF-8'));
                          echo 
                  '&nbsp;';
                          
                  print_r(mb_convert_encoding((string) $data->current()->Cell[1]->Data,'auto' 'UTF-8'));
                          echo 
                  '<br>';
                      } 
                  AFFE ist nur im Dezimalsystem ein Palindrom.

                  Kommentar

                  Lädt...
                  X