armalyte: Umlaute in XML werden falsch dargestellt

Hallo!

Also, ich habe einen XML-Datei in den Umlaute vorkommen, wie z.B:

<?xml version="1.0" encoding="ISO-8859-15" ?>
...
  <Name>Stütze</Name>
...

In einer PHP-Datei wird dann die XML mittels "simplexml_load_file" ausgelesen.
Allerdings werden die Umlaute dann völlig falsch dargestellt.

Aus ä ü ö Ä Ü Ö ß
werden dann nämlich  Ã¤ ü ö Ä Ãœ Ö ß

Schreibe ich explizit das UTF-8 verwendet werden soll, meckert der Parser, dass das "ü" nicht UTF-8-konform ist. Wie hier;
Warning: Structure.xml:63: parser error : Input is not proper UTF-8, indicate encoding !
und
Warning: Structure.xml:63: error: Bytes: 0xFC 0x74 0x7A 0x65

Schreibe ich dem Browser mittels header("Content-Type: text/html; charset=UTF-8") vor, er soll UTF-8 verwenden, werden aus der XML-Datei ausgelesene Umlaute zwar korrekt dargestellt, aber alle anderen 'normalen' Umlaute sind nun Fragezeichen.

Das Problem tritt bei Opera,Mozilla und IE auf.

Ich hoffe mein Problem ist verständlich rübergebracht :)
Was mach ich bzw. ist falsch?

Vielen Dank schonmal!

  1. hi,

    Was mach ich bzw. ist falsch?

    Offenbar würfelst du mehrere Kodierungen bunt durcheinander - entscheide dich mal für eine, und arbeite dann auch nur mit dieser (bzw. konvertiere Eingabedaten nötigenfalls vorher).

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Offenbar würfelst du mehrere Kodierungen bunt durcheinander - entscheide dich mal für eine, und arbeite dann auch nur mit dieser (bzw. konvertiere Eingabedaten nötigenfalls vorher).

      Danke für die schnelle Antwort - aber ich benutze überall den ISO-8859-1 Zeichensatz. Die ISO-8859-15 und UTF-8 Sachen waren nur zum testen ob der Fehler da evtl. durch behoben wird.....

      1. Liebe(r) armalyte,

        bist Du sicher, dass Dein Server auch ISO-8859-1 an den Browser ausliefert?

        Spiele doch einmal mit der Browseranzeige herum und probiere aus, was Dir im Browser bei UTF-8 angezeigt wird!

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Liebe(r) armalyte,

          bist Du sicher, dass Dein Server auch ISO-8859-1 an den Browser ausliefert?

          Ja, ganz sicher.

          Spiele doch einmal mit der Browseranzeige herum und probiere aus,

          was Dir im Browser bei UTF-8 angezeigt wird!

          Das hatte ich ja schon probiert. Die XML-Daten werden dann normal
          ausgegeben, und die 'normalen' Umlaute weden dann als "Raute mit
          Fragezeichen drin" dargestellt...

          Hab es jetzt mit der Funktion utf8_decode "zurechtgepfuscht"...

          Da ich in der XML angebe, dass ISO-8859-1 verwendet werden soll,
          und der Browser den Zeichensatz auch verwendet, gehe ich davon aus,
          dass irgendwo beim Auslesen der XML (bei der Funktion simplexml_load_file ?)
          wieder der UTF-8-Zeichensatz gebraucht wird.

          Aber danke nochmals an alle für die Hilfe!

          1. Hallihallo!

            Gerade gefunden im PHP Manual:
            http://de2.php.net/manual/de/function.simplexml-load-file.php#60621.

            Dein Fehler scheint also aus der Benutzung der Funktion simplexml_load_file zu kommen, die UTF-8 codierte Strings zurückliefert.

            Ich hoffe, das hilft weiter...

            Viele liebe Grüße,
            Der Dicki

      2. Hello out there!

        Danke für die schnelle Antwort - aber ich benutze überall den ISO-8859-1 Zeichensatz.

        Offensichtlich nicht.

        'ä' ist in Unicode das Zeichen U+00E4, in UTF-8 wird das durch durch die Oktettfolge C3 A4 codiert. [Wikipedia: UTF-8]

        Wird diese Oktettfolge nach ISO-8859 decodiert, wird daraus die Zeichenfolge U+00C3 à U+00A4 ¤, also 'ä'.

        See ya up the road,
        Gunnar

        --
        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
  2. Hallo,

    <?xml version="1.0" encoding="ISO-8859-15" ?>
    In einer PHP-Datei wird dann die XML mittels "simplexml_load_file" ausgelesen.

    libxml verwendet intern immer UTF-8, alles wird in UTF-8 umgewandelt. Wenn du mit simplexml_load_file() eine XML-Datei mit irgendeiner Kodierung einliest und dann darauf zugreifst, hast du immer UTF-8-kodierte Strings.
    (Ich sehe gerade, Dicki hat bereits darauf hingewiesen.)

    Schreibe ich explizit das UTF-8 verwendet werden soll

    Die Kodierung in der XML-Datei ist egal, da liegt der Fehler nicht.

    Schreibe ich dem Browser mittels header("Content-Type: text/html; charset=UTF-8") vor, er soll UTF-8 verwenden, werden aus der XML-Datei ausgelesene Umlaute zwar korrekt dargestellt, aber alle anderen 'normalen' Umlaute sind nun Fragezeichen.

    Dann stelle deine Site komplett auf UTF-8 um - oder wende auf jeden String, den du aus dem SimpleXMLElement-Objekt liest, utf8_decode() an.

    Mathias