David: Codierungs-Problem

Hallo,

ich habe folgendes Problem: ich habe in einer MySQL-Datenbank altgriechische Wörter abgespeichert.

Wenn ich die nun als HTML-Seite ausgeben will, werden die nur als Fragezeichen dargestellt.

Ich habe es schon mit

header("<meta http-equiv="Content-Type" content="text/html; charset=UTF-8");

versucht, aber das bringt auch nichts.

Bei der Tabelle steht im phpMyAdmin
 utf8_unicode_ci

bei den einzelnen Variablen der Tabelle habe ich nichts angegeben.

Kann mir da jemand weiterhelfen?

  1. Moin!

    Wenn ich die nun als HTML-Seite ausgeben will, werden die nur als Fragezeichen dargestellt.

    Bei der Tabelle steht im phpMyAdmin
    utf8_unicode_ci

    Zeigt phpMyAdmin die DB-Inhalte korrekt an? Dann hast du bei deinem eigenen Skript vergessen, der DB mitzuteilen, dass du "utf8" mit ihr sprechen willst. "SET NAMES utf8" als ersten Query schicken hilft.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
  2. echo $begrüßung;

    ich habe folgendes Problem: ich habe in einer MySQL-Datenbank altgriechische Wörter abgespeichert.

    Es ist egal, was du für Zeichen gespeichert hast, Hauptsache du hast dafür eine passende Kodierung verwendet.

    Wenn ich die nun als HTML-Seite ausgeben will, werden die nur als Fragezeichen dargestellt.

    Dann hast du irgendwo einen Zwischenschritt (aktuell oder bereits in der Vergangenheit nicht beachtet), der nicht die richtige Kodierung verwendet.

    Ich habe es schon mit
    header("<meta http-equiv="Content-Type" content="text/html; charset=UTF-8");
    versucht, aber das bringt auch nichts.

    Bei Zeichenkodierungen sollte man nicht blind versuchen und sich auf ein zufällig passendes Ergebnis verlassen. Wichtig ist hier das Verstehen des gesamten Vorgangs, sonst hast du nur wieder Lücken im System. Außerdem hat eine Angabe in den HTTP-Headern stets Vorrang vor einer Meta-Angabe.

    Bei der Tabelle steht im phpMyAdmin
    utf8_unicode_ci

    Diese Angabe ist weniger interessant. Wie sind die Felder kodiert?

    bei den einzelnen Variablen der Tabelle habe ich nichts angegeben.

    Dann sind dafür also die Werte aus dem Tabelleneintrag verwendet worden. Kontrolliere das bitte mit phpMyAdmin oder einer anderen geeigneten Auflistung der Tabellenkonfiguration (CREATE-Statement anzeigen lassen).

    Sind die Daten in der DB richtig kodiert oder schon beim Eintragen kaputtgegangen? Zeigt der phpMyAdmin die Daten richtig an, kann man davon ausgehen, das die Daten in Ordnung sind.

    Kann mir da jemand weiterhelfen?

    Wie so oft (im Archiv nachzulesen) vermute ich auch hier, dss du keine Angaben zur Kodierung machst, die auf der aktuellen Verbindung zwischen Server und Client zu verwenden ist. Der Server nimmt dann seine Default-Kodierung, und das wird latin1 sein.

    Eine gängige Lösung des Problems ist bereits auf der Startseite zum MySQL-Handbuch-Kapitel Character Set Support angegeben.

    echo "$verabschiedung $name";

    1. Hallo,

      Ich habe es schon mit
      header("<meta http-equiv="Content-Type" content="text/html; charset=UTF-8");
      versucht, aber das bringt auch nichts.

      [...] Außerdem hat eine Angabe in den HTTP-Headern stets Vorrang vor einer Meta-Angabe.

      Der obige Code kombiniert halt die Vorteile beider Angaben ... ;-)

      SCNR,
      Peter

      1. echo $begrüßung;

        header("<meta http-equiv="Content-Type" content="text/html; charset=UTF-8");
        [...] Außerdem hat eine Angabe in den HTTP-Headern stets Vorrang vor einer Meta-Angabe.
        Der obige Code kombiniert halt die Vorteile beider Angaben ... ;-)

        Das ist richtig, aber wenn der Server eine charset-Angabe mitsendet, die anders als die der Meta-Angabe lautet, dann hat die Meta-Angabe ebenso wie derjenige, der sich nur auf sie verlässt, einfach mal verloren.

        echo "$verabschiedung $name";