Bobby: Probleme Zeichenkodierung bei XML-Import mit Simplexml_load_file

Moin

Hab irgendwie grad nen deftiges Brett vorm Kopf. Ich habe eine XML-Datei, die ich gern per Simplexml_load_file ansprechen möchte.

Wenn ich die XML-Datei mit dem Texteditor local öffne, werden Sonderzeichen uncodiert angezeigt (äöü). Die Stelle, die bei SimpleXML einen Fehler erzeugt wird folgendermaßen angezeigt: "etwa 170 C (vorgeheizt) Heissluft: 150-160 C (nicht"

Auf dem Server geuploaded und mit SimpleXML aufgerufen erscheint folgender Fehler:

Warning: fopen(letztertest.cml) [function.fopen]: failed to open stream: No such file or directory in /var/www/web122/html/muttis-kochkunst-de/index.php on line 14

Warning: simplexml_load_file() [function.simplexml-load-file]: neu.cml:948: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xFF 0xFF 0xFF 0xFF in /var/www/web122/html/muttis-kochkunst-de/index.php on line 20

Warning: simplexml_load_file() [function.simplexml-load-file]: Strom: etwa 170 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºC (vorgeheizt) Heissluft: 150-160 ÿÿÿÿÿÿÿÿÿÿÿ in /var/www/web122/html/muttis-kochkunst-de/index.php on line 20

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /var/www/web122/html/muttis-kochkunst-de/index.php on line 20

Was sagt mir das? Wie kann ich die XML-Datei auf UTF8 codieren? Mit welchem Modus muß die Datei übertragen werden (binär oder text) ? Hat jemand nen Lösungsansatz für mich?

Gruß Bobby

--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  1. echo $begrüßung;

    Wenn ich die XML-Datei mit dem Texteditor local öffne, werden Sonderzeichen uncodiert angezeigt (äöü).

    Alle Zeichen müssen zunächst aus ihrer Byte-Form dekodiert werden, bevor das System dazu einen passenden Krakel anzeigen kann.

    Die Stelle, die bei SimpleXML einen Fehler erzeugt wird folgendermaßen angezeigt: "etwa 170 C (vorgeheizt) Heissluft: 150-160 C (nicht"

    Was heißt das nun? Dass die Grad-Zeichen ° fehlen?

    Auf dem Server geuploaded und mit SimpleXML aufgerufen erscheint folgender Fehler:
    Warning: fopen(letztertest.cml) [function.fopen]: failed to open stream: No such file or directory in /var/www/web122/html/muttis-kochkunst-de/index.php on line 14

    Das hat ja wohl nichts mit SimpleXML zu tun, wenn eine Datei nicht gefunden werden kann.

    Warning: simplexml_load_file() [function.simplexml-load-file]: neu.cml:948: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xFF 0xFF 0xFF 0xFF in /var/www/web122/html/muttis-kochkunst-de/index.php on line 20

    Entweder ist die XML-Datei als UTF-8 ausgezeichnet und stattdessen ISO-8859-1 oder anders gespeichert, oder letzeres ohne irgend eine encoding-Angabe, dann gilt per Default UTF-8, was sich dann ebenfalls beißt. Oder es ist noch irgendwas ganz anderes, das man als Außenstehender nur mit hellsehereischen Fähigkeiten erkennen kann.

    Wie kann ich die XML-Datei auf UTF8 codieren?

    Jeder moderne Editor kann das (vorzugsweise beim Speichern). Wenn er es nicht kann, ist er nicht modern. :-)

    Mit welchem Modus muß die Datei übertragen werden (binär oder text)?

    In den meisten Fällen kann man bei FTP bedenkenlos zu binär greifen. ASCII bzw. Text versucht Zeilenendeschaltungen zwischen unterschiedlichen Systemen anzupassen.

    Hat jemand nen Lösungsansatz für mich?

    Kodierungsangaben richtig setzen, sonst kann der Empfänger nicht wissen, was er da vorgesetzt bekommt.
    Wenn du dir über den Inhalt einer Datei nicht sicher bist, kannst man sie im Hex-Editor öffnen und sich die Bytewerte ansehen und mit den bekannten Kodierungstabellen vergleichen.
    Alternativ die Datei im Browser öffnen, unter Ansicht->(Zeichen)kodierung solange umstelen, bis der Browser die Datei richtig dekodieren kann. Dann kann man mit relativ hoher Wahrscheinlichkeit sagen, welche Kodierung vorliegt.

    echo "$verabschiedung $name";

    1. Moin

      Diese Hinweise helfen mir irgendwie gar nicht.

      Ich habe an der Codierung rumgestellt, die XML anders abgespeichert, in verschiedenen Modes hochgeladen.

      Und immer kommt entweder die genannte Fehlermeldung (natürlich ist die erste Meldung durch mich produziert) oder die Daten werden Cryptisch angezeigt: à la: Ãœberarbeitet für ... Was soviel heißt wie "überarbeitet für" Wenn ich die Datei per FTP auf dem Server öffne ist diese ebenfalls cryptisch.

      Wie bekomm ich raus, welche Kodierung die XML online hat?

      Ich bekomms einfach ne hin. Die XML-Datei ist ziemlich groß, deswegen kann ich sie nicht posten.

      Ich komme einfach ne weiter. Hilfe erbeten.

      Gruß Bobby

      --
      -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
      -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
      ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
      1. echo $begrüßung;

        Diese Hinweise helfen mir irgendwie gar nicht.

        Du hast, so scheint es mir, einen Fehler vorliegen, den man nicht einfach so mit einer bestimmten Aktion wegbekommt. Deshalb kann ich dich nicht einfach so zum Ziel führen, weil ich selbst nicht sehe(n kann), was genau der Fehler ist. Ich kann dir deshalb nur Hinweise geben, in welcher Richtung du weiter tätig sein kannst.

        Ich habe an der Codierung rumgestellt, die XML anders abgespeichert, in verschiedenen Modes hochgeladen.

        Die FTP-Modi sind es nicht. Der Unterschied ist nur, dass binär die Daten unverändert hochlädt, ASCII die Zeilenenden beeinflusst. Dabei werden aber keine 0xFF-Bytes eingefügt, die wohl dein Problem sind.

        [...] die Daten werden Cryptisch angezeigt: à la: Ãœberarbeitet für ... Was soviel heißt wie "überarbeitet für"

        Das sind UTF-8-Zeichen, die als ISO-8859-1 interpretiert werden.

        Wenn ich die Datei per FTP auf dem Server öffne ist diese ebenfalls cryptisch.

        Der Begriff kryptisch bringt dir bei der Fehlersuche nichts. Versuche das Prinzip zu verstehen. Ansonsten kannst du nur solange rumstochern, bis es passt und hast am Ende noch nicht mal die Gewissheit, dass es auch in allen Fällen richtig ist.

        Wie bekomm ich raus, welche Kodierung die XML online hat?

        Es ist der falsche Weg, erst etwas irgendwie zu kodieren (auch wenn es unbewusst passiert) und dann herausfinden zu wollwn, wie es kodiert ist. Es ist technisch einfach nicht einwandfrei feststellbar, welche Kodierung vorliegt. Der einzige Weg ist, sich die Daten als Kodierung X zu lesen versuchen. Wenn dabei kein Fehler zu sehen ist, dann kann man davon ausgehen, dass Kodierung X vorliegt. Dazu muss man aber den Sinn des Inhalts verstehen und entscheiden können, ob ein dekodiertes Zeichen auch das richtige ist.

        Wenn du den Text in einem Editor stehen hast, und alles ordentlich lesen kannst, dann speichere ihn in einer definierten Kodierung und Schreibe diese Angabe in alle relevanten Stellen, mit denen der Empfänger über die vorliegende Kodierung aufgeklärt wird. Bei XML ist das die encoding-Angabe im Vorspann. Und wenn diese Angabe mit der tatsächlich verwendeten Kodierung übereinstimmt, dann darf der Empfänger damit keine Probleme haben.

        Ich bekomms einfach ne hin. Die XML-Datei ist ziemlich groß, deswegen kann ich sie nicht posten.

        Das ist auch wenig sinnvoll, denn dabei können schon wieder Verluste auftreten, weil das hiesige System möglicherweise einige Zeichen nicht unverändert durchlässt.

        Die Fehlermeldung deines ersten Postings erwähnte ein paar Bytes 0xFF. Diese scheinen mir fehlerhaft zu sein. Bist du sicher, dass sie zu den Nutzdaten gehören. Als ISO-8859-1 interpretiert ist das das Zeichen ÿ. Das kommt wohl kaum mehrfach hintereinander in Nutzdaten vor. Notfalls müsstest du dir einen Hexeditor hinzuziehen, und die Bytewerte der kritischen Stellen anschauen.

        echo "$verabschiedung $name";

        1. Moin

          Wenn du den Text in einem Editor stehen hast, und alles ordentlich lesen kannst, dann speichere ihn in einer definierten Kodierung und Schreibe diese Angabe in alle relevanten Stellen, mit denen der Empfänger über die vorliegende Kodierung aufgeklärt wird.

          Das war der Lösungsansatz. Ich bekomme die XML Malformatted  (Angeblich UTF-8) aus einem Programm heraus. Und eh ich nun lang rumrätseln muß, habe ich es genau so gemacht, wie du es beschrieben hast. Ich habe die DAtei in einem externen Editor geöffnet und dann normal UTF-8 gespeichert. Und siehe da. Das funktioniert.

          Danke für die umfassende Erläuterung.

          Gruß Bobby

          --
          -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
          -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
          ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)