Sven P.: Probleme mit dem charset

Hallo ihr,

ich hab ein Problem mit den Zeichensätzen: In meiner Seite wird ein Teil des Inhalts aus einer Datenbank ausgelesen, einige statische Bereiche sind auch direkt im HTML-Text drin.

Wenn ich jetzt im Kopf meiner Seite folgendes Charset drin habe:
<META http-equiv="Content-Type" CONTENT="text/html; charset=iso-8859-1">

... dann werden die Umlaute in der Datenbank korrekt umgesetzt. Die entsprechende Spalte dort ist übrigens als utf8_bin festgelegt. Bei Umlauten im statischen HTML-Text erscheinen dann aber nur wirre Zeichen. Ich müsste dann mit &uuml; usw. arbeiten.

Wenn ich das Charset ändere in:
<META http-equiv="Content-Type" CONTENT="text/html; charset=utf-8">

... dann werden die Umlaute im statischen Text korrekt umgesetzt, die aus der Datenbank jedoch nicht.

Kann ich beides auch kombinieren, oder muss ich bei einem von beiden dann doch die Umschreibungen &uuml; benutzen?

Lg
Sven

  1. echo $begrüßung;

    Wenn ich jetzt im Kopf meiner Seite folgendes Charset drin habe:
    <META http-equiv="Content-Type" CONTENT="text/html; charset=iso-8859-1">
    ... dann werden die Umlaute in der Datenbank korrekt umgesetzt.

    Das heißt also, dass die Daten von der Datenbank in der Kodierung ISO-8859-1 (bzw. Latin1) geliefert werden.

    Die entsprechende Spalte dort ist übrigens als utf8_bin festgelegt.

    Vermutlich hast du nicht angegeben, welche Kodierung auf der Verbindung zwischen MySQL-Server und Client gesprochen werden soll, und MySQL ist sicher per default auf Latin1 eingestellt. Das heißt, dass MySQL beim Ausliefern der Daten die UTF-8-Felder ausliest und die Daten nach Latin1 umkodiert, um sie zu übertragen. Das ist das übliche Verhalten MySQLs, wenn es auf zwei verschiedene Kodierungen stößt. Dass es bei der Umkodierung nach Latin1 prinzipbedingt zu Datenverlust kommen kann, wenn das betreffende Zeichen nicht in Latin1 enthalten ist, will man solch eine Umkodierung nicht haben. Sonst braucht man ja auch die Daten nicht als UTF-8-kodiert abzulegen. Weise also MySQL an, auf der Client-Verbindung ebenfalls UTF-8 zu sprechen. Das geht beispielsweise mit der PHP-Funktion mysql_set_charset() (ab PHP 5.2.3) oder dem Statement SET NAMES.

    Bei Umlauten im statischen HTML-Text erscheinen dann aber nur wirre Zeichen. Ich müsste dann mit &uuml; usw. arbeiten.

    "Wirre Zeichen" ist für eine Problembeschreibung immer ungünstig. Anhand der konkreten Form der "wirren Zeichen" lassen sich Rückschlüsse ziehen, was da nun konkret für ein Problem vorliegt. Vermutlich sind es die üblichen UTF-8-kodierten Zeichen, wenn sie als ISO-8859-1 interpretiert werden.

    Wenn ich das Charset ändere in:
    <META http-equiv="Content-Type" CONTENT="text/html; charset=utf-8">
    ... dann werden die Umlaute im statischen Text korrekt umgesetzt, die aus der Datenbank jedoch nicht.

    Dies bestätigt meine Vermutung.

    Kann ich beides auch kombinieren, oder muss ich bei einem von beiden dann doch die Umschreibungen &uuml; benutzen?

    Sorge dafür, dass alle Daten von allen Beteiligten in der gleichen Kodierung verarbeitet und ordentlich deklariert werden.

    echo "$verabschiedung $name";