Hi!
Das 1und1 nicht von den kompetentesten Betrieben wird und die auch gern mal was am Server rumfummeln und umstellen ohne den Kunden was davon zu sagen habe ich schon oft gehör, aber es ist nun wirklich nicht tragbar, wenn eine Seite plötzlich, von jetzt auf gleich, nicht mehr funktioniert.
Nun versuch mal die Auswirkungen deiner Wissenslücken nicht auf andere abzuschieben, bevor du nicht weißt, was wirklich der Fall ist. Investiere deine Energie lieber in die Fehlersuche und Fortbildung, wie Kodierungen im Web-Umfeld zusammenspielen.
Die Seite lief bis vor kurzen einwandfrei (auf beiden Systemen) und von jetzt auf gleich haut die Seite auf dem komischen 1und1 Server bei allen Seiten, ausser der Startseite, die Umlaute kaputt.
Bei der Startseite ist auch was falsch. Sie sagt in ihrem Meta-Element zum Content-Type, dass die Kodierung ISO-8859-1 sei. Aber diese Angabe wird nicht berücksichtigt, weil im gleichnamgen HTTP-Header ebenfalls eine charset-Angabe steht, die immer die Angabe in der Webseite übertrumpft. Der HTTP-Header sagt also UTF-8. Und da die Umlaute auf dieser Seite richtig erscheinen, ist die Seite tatsächlich auch UTF-8-kodiert.
Umlaute werden nur noch als Raute mit Fragezeichen dargestellt. An der Seite wurde nichts gemacht, keine Textänderungen oder sonstige Änderungen.
Die Fragezeichenvierecke sind ein typisches Zeichen dafür, dass der Browser UTF-8 gesagt bekommen hat, stattdessen aber Daten in anderer Kodierung gesendet bekommt.
Bei den anderen Seiten sind HTTP-Header und Meta-Angaben gleich zur Startseite, aber diese Seiten sind ISO-8859-1-kodiert.
Das Mitsenden der charset-Angabe im HTTP-Header kann einerseits über die Apache-Konfiguration veranlasst werden, andererseits kann ein Script auch selbst Header senden. (PHP über die Funktion header().) Finde heraus, ob in deinen .htaccess-Dateien sowas wie AddDefaultCharset oder ähnliches steht.
Eine Ursache für die Diskrepanz zwischen den Seiten könnte sein, dass die Startseite beim Editieren als UTF-8 gespeichert wurde.
Das Seltsame: Es läuft ein CMS im Hintergrund, welches sowohl die Startseite als auch die anderen Seiten auf Grundlage der selben Layout-Datei darstellt.
Erstellt es die Seiten bei jedem Request neu oder nur einmalig und das fertige Resultat wird hochgeladen? Ich kann mir schlecht vorstellen, dass das CMS für die Startseite nach dem Rendern noch eine Zeichenumkodierung vornimmt. Besser wäre, durchweg bei allen beteiligten Systemen mit einer einzigen Kodierung zu arbeiten und diese auch korrekt jedem weiteren Verarbeiter zu den Daten zu deklarieren.
Beim Umgang mit Zeichenkodierungen gibt es zwei Grundsätze: Jedes System muss mit der Kodierung umgehen können, solange es die Daten nicht nur unbesehen durchreicht. Beim Austausch zwischen zwei Systemem muss die verwendete Kodierungangegeben oder ausgehandelt werden (und das am besten explizit und nicht durch ein Verlassen auf die Default-Konfiguration). Und nun kommen die Details, also den Systemem DBMS, Webserver, Script-Engine und Browser und der Kommunikation zwischen ihnen diese beiden Grundsätze umzusetzen. Man sollte außerdem immer eine Kodierung nehmen, die alle zu erwartenden Zeichen kodieren kann und bei aktuellen Systemen sich nicht mit weniger als UTF-8 zufrieden geben.
Es werden vom CMS einfach nur die Daten in einen Bereich der Layoutseite kopiert und das Ganze an den Browser zurückgegeben. Fie Startseite wird richtig dargestellt, der Ganze Rest nicht.
Die Startseite ist zufällig richtig, die anderen zufälligerweise nicht. Achte auf die beiden Grundsätze. Da du hier ein CMS verwendest, bist du da etwas eingeschränkt und musst dich darauf verlassen, dass der Programmierer seinerseite alles richtig gemacht hat.
Da die Umlaute auch im CMS-Configbereich falsch dargestellt werden (in den Eingabefeldern), scheint der Datenbankserver was falsches zurückzuliefern.
Nein, das DBMS scheint kein Problem zu bereiten, die Webseiten sind falsch deklariert.
Lo!