Hi!
whow, danke für die ausführliche antwort;-)
Zu dem Thema gibt es übrigens schon eine ganze Menge derartiger Antworten im Archiv.
Ich habe jetzt eine neuere version von phpMyAdmin. hier habe ich bei den db-feldern überall "utf8_unicode_ci" angegeben, ebenso für die gesamte tabelle.
Die Werte für Tabelle und Datenbank sind nur Default-Werte für neu angelegte Elemente (Tabelle->Felder und Datenbank->Tabellen)
wo kann ich die kommunikation einstellen??
Wenn man es sich recht überlegt, sollten einem zwei Stellen einfallen. Zum einen sind bei einer Kommunikation zwei Geräte beteiligt, also sind zwischen diesen beiden die Parameter dieser Kommunikation auszuhandeln. Zum anderen gibt es einen Default-Wert, der Server-weit eingestellt wird.
Auf den Server-Default-Wert sollte man sich nach Möglichkeit nicht verlassen. Nach erfolgreichem Verbindungsaufbau sollte deshalb die Kodierung mit mysql(i)_set_charset() (PHP vorausgesetzt) vereinbart werden. Wenn diese Funktion nicht zur Verfügung steht, kann man ein SET NAMES-Statement absetzen. Das ist zwar weniger gut als die Funktion, aber für die hierzulande üblichen Kodierungen der ISO-8859-Familie und UTF-8 ausreichend.
Die charset-Angabe im HTTP-Header Content-Type ist die maßgebliche Stelle. Fehlt dort ein Eintrag, darf der Browser diese Information aus dem gleichnamigen Meta-Element nehmen. Prüfen welche Kodierung vorliegt, kann man, indem man dem Browser (meist) im Menü Ansicht die Zeichenkodierung händisch einstellt. Werden dann alle Zeichen richtig dargestellt, kann man davon ausgehen, dass die Daten in dieser Kodierung vorliegen.
ich habe auf jeder seite, die im spiel war, den zeichensatz im browser manuell auf utf-8 gestellt. auch in den html-seiten ist utf-8 angegeben...
Wenn er nicht bereits auf UTF8 steht, dann hast du noch eine Baustelle. Was der Server in seinen HTTP-Headern sendet, findest du beispielsweise mit der Livehttpheaders-Extension für den Firefox raus (betrachte den Response-Teil). Selbst setzen kannst du das unter PHP mit der Funktion header().
prinzipiell für mein verständnis: habe ich vielecht irgendwo eine utf-angabe zu setzen, an die ich nicht gedacht habe? mein setting: php-dokumente mit enthaltenen (html-)foormularen, die daten an eine mySql-db schicken und wieder abholen. wie gesagt, die html-docs und auch die db sollten jetzt utf8 sein. muß ich für php irgendwo vielleicht extra noch die codierung angeben?
Betrachte jeden Request und jede Verbindung einzeln. Ein Browser tut das auch. Er nimmt sich generell die für das aktuelle Dokument angegebenen Angaben. Wenn dein Webserver (z.B. Apache) nicht generell eine charset-Angabe mitsendet, solltest du möglichst einen eigenen HTTP-Header _mit_ dieser Angabe senden. Zusätzlich schadet das Meta-Element nicht (besonders wenn das Dokument lokal gespeichert wird wäre die wichtig). Zum DBMS hin, füge zu jedem mysql_connect() ein mysql_set_charset() (oder SET NAMES) hinzu.
Lo!