Umlaute in XML werden falsch dargestellt
armalyte
- php
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!
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
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.....
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.
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!
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
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
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