Hallo,
ich erstelle per PHP eine kleine Datei die aus Kompatibilitätsgründen zum eingesetzten CMS im ISO-8858-1 vorliegen muss. Die Datei enthält eine Zeichenkette mit Umlauten und Sonderzeichen. Die Datei wir mit fopen auch korrekt geöffnet und mit HTML-Content gefüllt. Per Meta-Tag wird der Charset auch auf ISO-8859-1 festgesetzt, die Umlaute in der Datei werden bei der Ausgabe trotzdem falsch angezeigt.
Ich tippe darauf, dass es daran liegt. dass die per PHP geschriebene Datei nicht als ISO-8859-1 geschrieben wird, oder? Wie komme ich das Problem in Griff?
-
10.04.2012, 17:46 #1Lieutenant
- Dabei seit
- Jul 2010
- Beiträge
- 531
[PHP] fopen mit richigem Charset wg. Umlauten
Richtlinie zur Beantwortung meiner Fragen::Du kannst bei Fragestellungen mit Lösungsansätzen helfen, hast praktische Tipps oder kennst Dich mit der Thematik aus? Prima, dann freue ich mich sehr von Dir zu hören! Wenn Du nicht helfen kannst, frage nicht herum und baue nicht eine Mauer um die eigentliche Fragestellung, sondern halte bitte die Finger still. Du ersparst mir und anderen Interessierten Zeit, dem Forum Spam. Danke!
- Anzeige
Logge dich ein, um diese Anzeige nicht zu sehen. -
10.04.2012, 17:50 #2
[PHP] AW: fopen mit richigem Charset wg. Umlauten
Oder aber vor der Ausgabe konvertieren.Code [php]:fwrite($file, iconv( "UTF-8", "ISO-8858-1//TRANSLIT", $content));
-
10.04.2012, 18:08 #3Lieutenant
Ersteller dieses Themas
- Dabei seit
- Jul 2010
- Beiträge
- 531
[PHP] AW: fopen mit richigem Charset wg. Umlauten
Das heißt, die Datei selbst kann gar nicht als ISO oder UTF vorliegen, sondern nur die darin enthaltenen Zeichen? Das würde heißen, dass es im Prinzip wurst ist in welchem Charset die Zeichenkette da reingeschrieben wird. Hmm, so richtig blicke ich noch nicht durch...
Hmm, das bedeutet, dass nur jedes Zeichen in der Zeichenkette von sich weiß, welchem Charset es angehört und die Datei nur den Rahmen bildet? Daher weiß der Kuchen nicht, wie er heißt und welche Zutaten in ihm Stecken.
Das Metatag bilden den Namen des Kuchens, die Zutaten den charset der einzelnen Zeichen?Richtlinie zur Beantwortung meiner Fragen::Du kannst bei Fragestellungen mit Lösungsansätzen helfen, hast praktische Tipps oder kennst Dich mit der Thematik aus? Prima, dann freue ich mich sehr von Dir zu hören! Wenn Du nicht helfen kannst, frage nicht herum und baue nicht eine Mauer um die eigentliche Fragestellung, sondern halte bitte die Finger still. Du ersparst mir und anderen Interessierten Zeit, dem Forum Spam. Danke!
-
10.04.2012, 18:13 #4
[PHP] AW: fopen mit richigem Charset wg. Umlauten
Ich bin inzwischen dazu übergegangen immer mit dem HTML-Codes für Sonderzeichen und Umlaute zu arbeiten, dann hat man diese Probleme nicht mehr und muss sich auch (fast) keine Gedanken mehr über die Codierung machen.Wie komme ich das Problem in Griff?
Mit Notepad++ kannst du auch mit Suchen und ersetzen (Strg+F) alle Sonderzeichen und Umlaute in allen Dateien die betroffen sind ganz fix durch die passenden HTML-Codes ersetzen.
-
10.04.2012, 18:20 #5
-
10.04.2012, 21:42 #6
[PHP] AW: fopen mit richigem Charset wg. Umlauten
@Überkinger
Die Geschichte mit den Charsets... herrlich
Also. Prinzipiell existieren keine Zeichen. Es gibt nur Bytes/Zahlen. Ein Textdokument ist also eine Aneinanderreihung von Zahlen. Das Charset sorgt nun dafür, dass jeder Zahl/Byte ein entsprechendes Zeichen zugewiesen wird. Wenn du also ein UTF-8 Dokument als ASCII-Dokument öffnest, dann kann ASCII beispielsweise mit den japanischen Zeichen nichts anfangen, weil es für die entsprechenden Zahlen kein Zeichen besitzt.
Was nun bei dir das Problem ist:
Du hast ein Dokument unbekannten Charsets, dass du unbedingt auf ISO-8858-1 trimmen musst. Dein Browser versucht nämlich, dein "HTML-Dokument" als ISO-8858-1 zu interpretieren (sagst du ihm über den Metatag) und wird also bei (z.B.) UTF-8 Zeichen scheitern.
Grundsätzlich kann ich dir raten, bei unbekannten Charsets von UTF-8 auszugehen... das bietet (imho) die höchste Abwärtskompatibilität.
Deshalb musst du vor der Ausgabe, die entsprechenden Zeichen in das ISO-8858-1 Pendant "umwandeln". Dafür nutzt du am besten die Funktion iconv. Das Dokument liest du dafür einfach als String ein (file_get_content), konvertierst ihn und schiebst ihn per echo raus.
-
10.04.2012, 22:20 #7Lieutenant
Ersteller dieses Themas
- Dabei seit
- Jul 2010
- Beiträge
- 531
[PHP] AW: fopen mit richigem Charset wg. Umlauten
Super. Danke schön! Das bedeutet aber auch, dass ich immer wissen muss, welches der Quell-Zeichensatz ist. Bei Notepad++ nehme ich also stets UTF-8 w/o BOM. Notepad++ weiß dann, dass einem Ä andere Bits zugewiesen werden, als wenn ich ISO-8859-1 eingestellt habe...
Und wie gehe ich vor, wenn ich ein anderes Script verwende und feststellen will, in welchem Charset es vorliegt?
Den Unterschied würde ich nur dann sehen, wenn ich zwei gleiche Dateien in einem HEX-Editor anschauen würde, die eine mit UTF-8, die andere mit ISO-8859-1? Ah, jetzt klingelt es. Also immer schön mit Editoren arbeiten, die UTF-8 aktiv unterstützen und den Mode auch anzeigen. Notepad.exe ist daher Müll, da man nicht sieht und weiß, welcher Charaset angewendet wird.Geändert von Überkinger (10.04.2012 um 22:22 Uhr)
Richtlinie zur Beantwortung meiner Fragen::Du kannst bei Fragestellungen mit Lösungsansätzen helfen, hast praktische Tipps oder kennst Dich mit der Thematik aus? Prima, dann freue ich mich sehr von Dir zu hören! Wenn Du nicht helfen kannst, frage nicht herum und baue nicht eine Mauer um die eigentliche Fragestellung, sondern halte bitte die Finger still. Du ersparst mir und anderen Interessierten Zeit, dem Forum Spam. Danke!
-
10.04.2012, 22:41 #8

Zitieren
