Zeichenverfälschung
Sebastian Becker
- php
Hallo,
ich binde Metatags und Seiteninhalte auf einem 1&1-Server mit PHP-Includes ein. Die entsprechenden Dateien liegen richtig auf dem Server, wurden also nicht beim Hochladen korrumpiert.
Trotzdem werden Sonderzeichen teilweise falsch ausgegeben - und zwar beim Internet Explorer und beim Mozilla jeweils an anderer Stelle. D.h. die selben Zeichen werden im selben Browser mal falsch und mal richtig dargestellt. Mozilla zeigt außerdem am Seitenanfang völlig unmotiviert "" an ...
Richtig: Gümüstürkmen
Mozilla: Gümüstürkmen
Internet Explorer: G�rkmen
Hier die unvollendete Beispielseite (in den Quelltext sehen bzw auf "Info" klicken) ...
http://www.art-of-cihangir.de/new/en/gallery.php
Außerdem ist es nicht möglich, die Seiten mit einem auf einem anderen Server funktionierenden Skript mit gZip zu komprimieren (ergibt Zeichensalat) - vielleicht besteht da irgendein Zusammenhang (?) ...
Ich bin kurz vor der Verzweifelung - wo sind die echten Profis, die sich im Gegensatz zu 1&1 mit Servern auskennen ????
Danke für alle sachdienlichen Hinweise, Grüße,
Sebastian
Moin!
Trotzdem werden Sonderzeichen teilweise falsch ausgegeben - und zwar beim Internet Explorer und beim Mozilla jeweils an anderer Stelle.
Du hast ein Zeichencodierungsproblem mit UTF-8 und ISO-8859-1.
Mozilla zeigt außerdem am Seitenanfang völlig unmotiviert "" an ...
Diese Zeichen sind in UTF-8 die "BOM - Byte Order Mark". Man darf sie bei UTF-8 auch ersatzlos weglassen, dargestellt wird sie allerdings nur, wenn die Zeichen nicht als UTF-8 interpretiert werden - was bei dir offenbar der Fall ist.
Richtig: Gümüstürkmen
Mozilla: Gümüstürkmen
Internet Explorer: G�rkmen
Mozilla macht es richtiger, das Problem ist aber das gleiche: Du gibst die Umlaute als UTF-8 aus, deine Seite wird dem Browser gegenüber aber als ISO-8859-1 (o.ä.) gekennzeichnet und dementsprechend falsch dargestellt.
Warum der IE da noch weniger anzeigt - keine Ahnung. Ich schätze aber, die Umlautanzeige wird korrekt werden, wenn du in deinem Browser die Codierung mal von "automatisch" auf "UTF-8" umstellst.
Wenn das dann klappt, solltest du unbedingt zwei Dinge verändern:
1. Ein Meta-Tag mit der Charset-Angabe in den <head> packen.
2. Noch wichtiger: Eine Charset-Angabe mit der header()-Funktion ausgeben.
Beide sollten identisch die Angabe "UTF-8" senden.
Außerdem ist es nicht möglich, die Seiten mit einem auf einem anderen Server funktionierenden Skript mit gZip zu komprimieren (ergibt Zeichensalat) - vielleicht besteht da irgendein Zusammenhang (?) ...
Wenn der Server dem Client nicht sagt, dass da komprimierte Daten kommen, führt das möglicherweise zum gleichen Problem.
- Sven Rautenberg
Hi Sebastian,
Richtig: Gümüstürkmen
Mozilla: Gümüstürkmen
Internet Explorer: G�rkmen
Dein Server liefert im HTTP Header keine Information über die Zeichenkodierung mit - da wählt mein Firefox eben mal den ISO 1 aus, stelle ich das manuell auf UTF-8 um, so bekomme ich den richtigen Text angezeigt. Vermutlich wählt auch dein IE einen falschen Zeichensatz, wobei mein IE 6.0 unter WinXP SP2 das richtig anzeigt.
Es reicht eben nicht, den Zeichensatz in einer Meta Angabe festzulegen - darauf greifen die Browser AFAIK nur zurück, wenn du eine Datei von der Festplatte öffnest. Andernfalls hat der HTTP Header immer höhrere Priorität.
Wie du deinen Server dazu bringst, den richtigen Zeichensatz anzugeben, dürfte mehrfach im Archiv stehen (AddDefaultCharset sollte helfen), ansonsten wird dir auch die Apache Doku weiterhelfen.
MfG, Dennis.
Hallo,
danke für die bisherigen Hinweise.
Ich gebe jetzt auch den FTTP-Header aus, doch das gewünschte Resultat ist noch nicht eingetreten. Mozilla schreibt jetzt lediglich "G�m�st�rkmen" und das kryptische Kürzel am Seitenanfang ist weg ...
Servereinstellungen kann ich übrigens nicht ändern, da es ein geshareter Server ist.
Ich werde erst mal weiter probieren und freue mich über weitere Hilfestellungen und Anregungen ...
Grüße,
Sebastian
Hi Sebastian,
Ich gebe jetzt auch den FTTP-Header aus, doch das gewünschte Resultat ist noch nicht eingetreten. Mozilla schreibt jetzt lediglich "G�m�st�rkmen" und das kryptische Kürzel am Seitenanfang ist weg ...
Nein, du gibst noch keine Information über den Charset im Header an - zumindest nicht laut meinem Firefox, da heißt es immer noch:
Content-type: text/html
Bau mal das am Anfang noch ein:
header("Content-type: text/html; charset=UTF-8");
Selbige Angabe macht übrigens auch hier das Forum...
MfG, Dennis.
Hallo, Sebastian,
Ich gebe jetzt auch den FTTP-Header aus, doch das gewünschte Resultat ist noch nicht eingetreten. Mozilla schreibt jetzt lediglich "G�m�st�rkmen" und das kryptische Kürzel am Seitenanfang ist weg ...
Nein, du gibst noch keine Information über den Charset im Header an - zumindest nicht laut meinem Firefox, da heißt es immer noch:
Content-type: text/html
Das ist ja auch der Content-Type - und zwar mit dem Character Set UTF-8. Mit XML habe ich es aber auch schon erfolglos probiert ...
Bau mal das am Anfang noch ein:
header("Content-type: text/html; charset=UTF-8");
Genau das steht in meinem Code ...
Ich stehe kurz vor der Verzweifelung :-( ....
Grüße,
Sebastian
Hallo, Dennis,
der Fehler tritt nur auf, wenn die entsprechenden Zeichen in einer Datei stehen, die per PHP inkludiert wird - hier muß irgendwo der Knackpunkt liegen.
Kann ich den inkludierten Dateien auch noch einen Header mitgeben?
Grüße,
Sebastian
Hi Sebastian,
Kann ich den inkludierten Dateien auch noch einen Header mitgeben?
Du meinst, ob du in einer Datei, die inkluded wird noch header() verwenden kannst? Ja, klar - aber nur so lange vorher noch keine Ausgabe an den Browser erfolgt ist.
MfG, Dennis.