Umlautzeichen dekodieren PHP

sourb

Aktives Mitglied
Ich lese mit einem Script ein paar Daten via XML aus und bekomme zum Teil Umlautschreibweisen wie diese: "hei�t".

Gibt es da eine PHP-Funktion, mit der ich das in die richtige Schreibweise umwandeln kann?
 
Sieht so aus, als würde der Zeichensatz UTF8-Codiert sein. Was aber eigenlich keinen Nachteil mit sich bringt.
Aber wie auch immer, mit utf8_encode($str) kannste das ins ISO-8859-1 Format kodieren.




 
@Eric

Dein Befehl ist dafür das, um Umlaute in HTMLschreibweise zu bringen
Er hat aber kein Umlaut, er hat ein "Komma"

@Peter

Dort ist kein UTF oder ISO
bzw es ist ISO, war aber mal UTF ... wurde exportiert und dabei kamen Zeichen raus die nicht seinsollten und die wurden dann zu einem "erlaubten" Zeichen umgewandelt ... bzw dann müßte dort ein "?" sein = "?" ist erlaubt und es fragt "Was war das für ein zeichen dort, dan kannte ich nicht"



Hier hilft quasie nur ein Wörtebuch drüberschicken ....
 
Die Funktion iconv sollte das Problem beheben, wenn man die richtigen Zeichensätze verwendet. Vermutlich von UTF8 zu irgendeinem ISO-Standard.
 
QUOTE (sourb @ Fr 10.07.2009, 17:19)Ich lese mit einem Script ein paar Daten via XML aus und bekomme zum Teil Umlautschreibweisen wie diese: "hei�t".

Gibt es da eine PHP-Funktion, mit der ich das in die richtige Schreibweise umwandeln kann?

Zuerst einmal sollte man herausfinden, in welcher Gegend der Fehler liegt.

Sprich: Sind die Originaldaten überhaupt korrekt? Wenn ja, werden diese mit der korrekten Codierung eingelesen? Sprich: Berücksichtigt das einlesende Script die Xml-Regeln für Codierungen?

Der Anbieter solcher Daten kann die eigene Codierung jederzeit ändern, sofern er das konsistent macht. Wenn das Script die Xml-Daten falsch auswertet, dann muß man den Fehler auch da beheben - und nicht eine Funktion drüberschicken.


Die obige Darstellung kriege ich auch, wenn ich die per ISO-8859-1 ausgelieferten Ayom-Seiten per Browsereinstellung als UTF-8 - codiert betrachte:


QUOTE F�r Spende - Gegenleistung
Bu�geldkatalog / Bussgeldrechner


Da wird ein Zeichen mit einem Codepunkt > 127 geschickt, da müßten aber zwei Byte geschickt werden anstatt nur eines, also weiß der Browser nicht, was er eigentlich darstellen soll.

Bloß: Ist das ein Problem des Einlesens / Verarbeitens der Xml-Datei oder ist es (völlig unabhängig von der Xml-Verarbeitung) ein reines Problem der Ausgabe, daß in einer UTF-8 - Ausgabe ein Zeichen mit einem Codepunkt > 127 als 1 Byte ausgegeben wird? Letzteres produziert denselben Effekt.
 
QUOTE (Jürgen Auer @ Sa 11.07.2009, 18:27) Sprich: Sind die Originaldaten überhaupt korrekt? Wenn ja, werden diese mit der korrekten Codierung eingelesen? Sprich: Berücksichtigt das einlesende Script die Xml-Regeln für Codierungen?

Richtig, in der Datenbank ist alles korrekt aufgelistet und die Umlaute werden dort richtig angezeigt. Das heißt, die Problemaitk ist scheinbar in der Ausgabe, nicht aber in der Übertragung zu finden.

Da ist mir aber gerade irgendwie suspekt, woran das liegen soll.
 
Setze mal diesen Query bevor Du die XML-Daten in deine DB schreibst.
CODE mysql_query("SET NAMES 'utf8'");

Damit teiltst Du MySQL mit, dass die Kommunikation zwischen PHP und MySQL in UTF8 stattfindet.
Bei manchen Server Konfigurationen muss man das extra deklarieren.

 
QUOTE (Peter H @ Sa 11.07.2009, 23:54) Setze mal diesen Query bevor Du die XML-Daten in deine DB schreibst.

CODE mysql_query("SET NAMES 'utf8'");

Damit teiltst Du MySQL mit, dass die Kommunikation zwischen PHP und MySQL in UTF8 stattfindet.
Bei manchen Server Konfigurationen muss man das extra deklarieren.

Du bist mein Held der Nacht!
smile.gif


Danke vielmals. =)))

Edit:
2. Lösung
Das Problem lag einzig und allein an HTML. Ich hatte in der META-Angabe behauptet, dass die Kodierung UTF-8 sei, obwohl sie ISO-8859-1 ist. So kam es, dass die Daten, die in der Datenbank eigentlich richtig gespeichert waren bei der Ausgabe Probleme machten.


CODE <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

 
Zurück
Oben