Einlesen von xml-Dokument ergibt fehlerhafte Zeichen
Ollis
- php
1 dedlfix0 Ollis
0 Axel Richter0 Ollis
Hi,
ich versuche gerade, mittels file_get_contents eine xml-Datei (genauer eine RSS-Datei) einzulesen. Wenn ich mir die Datei aber ausgeben lasse, sind alle Sonderzeichen zu '?' umgewandelt worden (benutze Charset UTF-8). Ich weiß nicht, wie ich das umgehen könnte. Habe folgendes probiert:
$patterns = array(
'/ß/', // ß
'/Ä/', '/ä/', // Ä, ä
'/Ö/', '/ö/', // Ö, ö
'/Ü/', '/ü/' // Ü, ü
);
$replacements = array(
'ß', // ß
'Ä', 'ä', // Ä, ä
'Ö', 'ö', // Ö, ö
'Ü', 'ü' // Ü, ü
);
$data = preg_replace($patterns, $replacements, file_get_contents($file));
// AUSGABE-Beispiele:
M?nchen
f?r
verk�rpert
Weiß jemand, warum das so ist oder wie ich das verhindern kann? Mein RSS-Parser "verschluckt" nämlich alle Zeichen vor einem Sonderzeichen. Seltsamerweise scheint nach dem ersten Sonderzeichen alles wieder richtig zu funktionieren.
Gruss Olli
ich versuche gerade, mittels file_get_contents eine xml-Datei (genauer eine RSS-Datei) einzulesen. Wenn ich mir die Datei aber ausgeben lasse, sind alle Sonderzeichen zu '?' umgewandelt worden (benutze Charset UTF-8). Ich weiß nicht, wie ich das umgehen könnte. Habe folgendes probiert:
Was sagst du denn dem Browser, was er für einen Zeichensatz erwarten soll?
Gar nichts? Irgendwas im Meta-Tag?
Dann wird der Server deinem Browser sicher ISO-8859-1 erzählen und dann hast du den Salat... :-)
header('Content-Type: text/html; charset=utf-8');
sollte das beheben.
Ansonsten kannst du auch noch die GNU Recode Funktionen oder die iconv Funktionen oder utf8_encode()/utf8_decode() verwenden.
Nene, hab den Header über PHP rausschreiben lassen. Da steht schon wie von dir gesagt die entsprechende Zeile drin. Also es ist _tatsächlich_ UTF-8. Werde mir aber die iconv-Funktion mal genauer anschauen. Danke!
Gruss Olli
Hallo,
ich versuche gerade, mittels file_get_contents eine xml-Datei (genauer eine RSS-Datei) einzulesen. Wenn ich mir die Datei aber ausgeben lasse, sind alle Sonderzeichen zu '?' umgewandelt worden (benutze Charset UTF-8).
Wo wird charset UTF-8 genutzt?
In welchem charset sind die Zeichen in der RSS-Datei kodiert?
Welches charset nutzt PHP?
$patterns = array(
'/ß/', // ß
'/Ä/', '/ä/', // Ä, ä
'/Ö/', '/ö/', // Ö, ö
'/Ü/', '/ü/' // Ü, ü
);$replacements = array(
'ß', // ß
'Ä', 'ä', // Ä, ä
'Ö', 'ö', // Ö, ö
'Ü', 'ü' // Ü, ü
);$data = preg_replace($patterns, $replacements, file_get_contents($file));
Du ersetzt z.B. das Vorkommen der Entity Ä durch die Entity Ä. Was soll das bringen? Meiner Meinung nach wird da gar nichts ersetzt. Es müssten nämlich die Entities Ä ... im RSS-File stehen.
Wenn die RSS-Datei in UTF-8 kodiert ist, dann musst Du http://de.php.net/utf8-decode benutzen.
viele Grüße
Axel
Hi
hab grad nochmal nachgeschaut, die RSS-Datei ist in ISO-8859-1 (also Standardzeichensatz) kodiert.
Die "ersetzen"-Funktion hab ich reingebaut, weil es ja nicht ging. Hab ein bisschen experimentiert...
Gruss Olli
Hallo,
hab grad nochmal nachgeschaut, die RSS-Datei ist in ISO-8859-1 (also Standardzeichensatz) kodiert.
Warum willst Du diese Kodierung nicht beibehalten? Du kannst nicht einfach die Kodierung in UTF-8 ändern und erwarten, dass z.B. ü (\xFC) dann immer noch als ü angezeigt wird. In UTF-8 wird ü angezeigt, wenn in den Byte-Daten \xC3BC steht.
Du könntest mit http://de2.php.net/htmlentities alle Sonderzeichen in HTML-Entities umwandeln. Im Kontext text/html ist für diese Entities das eingestellte charset dann egal.
viele Grüße
Axel