Stefan: Fehler mit UTF-8 auf 1und1 Server

Hallo Zusammen,
ein Kunde von mir hat bei 1und1 eine Website laufen ( http://www.defibrillator-aed.de/ ). Parallel läuft die selbe Website mit den selben Dateien auf unserem Server als Arbeitsversion, da wir einen Shop einbauen sollen.
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. Umlaute werden nur noch als Raute mit Fragezeichen dargestellt. An der Seite wurde nichts gemacht, keine Textänderungen oder sonstige Änderungen.

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.
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.

Da die Umlaute auch im CMS-Configbereich falsch dargestellt werden (in den Eingabefeldern), scheint der Datenbankserver was falsches zurückzuliefern.

Ein kopieren der Daten von unserem Arbeitsserver, inkl. der MYSQL-Datensätze, brachte keinerlei Änderung.

Kann irgendwer einen Hinweis geben, woran das liegen kann, oder zumindest, wie ich die Fehlerquelle bzw. den Fehler am besten herausfiltern kann?

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.

  1. Moin,
    Scheinbar gibt es einen Fehler in der Codierung. Woran das letztendlich liegt, kann ich dir nicht sagen.
    Ich hatte mal ein ähnliches Problem. Zu der Zeit lud ich nicht nur meine Inhalte aus einer Datenbank, sondern auch die Quelltexte für die einzelnen Seiten. Durch eine Umstellung der MySQL-Tabellen hatte ich mir die mit dem Quelltext so zerstört, dass keine adäquate Codierung mehr vorlag. Ich musste dann durch die verschiedenen Quellen gehen und einige Sonderzeichen ersetzen.

    Grüße Marco

    1. moin,

      Scheinbar gibt es einen Fehler in der Codierung.

      Der HTTP-header ist text/html; charset=utf-8

      Da musst Du nur die richtigen Bytes dazuliefern und schon klappts mit der Darstellung.

      Was aus Deiner DB kommt, sind möglicherweise keine Bytes, sondern utf8-kodierte Zeichenketten, das hängt davon ab, ob Dein Script mit der DB zeichenorientiert oder byteorientiert kommuniziert. Was Du in Richtung Webserver mit print oder echo ausgibst, geht auf STDOUT, das ist ein Handler und auf einen Handler müssen Bytes geschrieben werden.

      Hotti

  2. 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!