Hallo dedlfix,
Es reicht nicht, einfach nur irgendeine Kodierung zu verwenden. Wichtig ist, dass man dem Empfänger mitteilt, welche Kodierung verwendet wurde.
Genau das meinte ich ja damit, als ich sagte, die Seite muß utf-8 codiert sein.
Dazu gibt es für HTTP die Zusatzangabe zum charset im Content-Type-Header. Als Ersatz gibt es im HTML eine Meta-Element-Angabe.
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
ist also nur _zweite_ Wahl? Kannst Du das mit dem Content-Type-Header bitte näher erklären? Ich habe jetzt versucht, mich schlau zu machen, habe die entsprechende WIKIPEDIA-Seite gelesen, aber ich verstehe es nicht. Ist das was, was ich mit der .htaccess beeinflussen kann?
Was ich auch gefunden habe bei meinen 'Recherchen' ist der Hinweis, daß _jede_ php-Datei am Anfang folgendermaßen beginnen soll/muß:
<?php
header("Content-type:text/html;charset=utf-8");
?>
Meintest Du _das_ oder ist das _wieder_ was anderes? Und um mich ganz zu verwirren, habe ich auch wo gelesen, daß man über die php.ini was machen kann: default_charset = "utf-8"
Hat das _auch_ damit zu tun oder ist _das_ jetzt wieder was völlig anderes? Du siehst, ich bin diesbezüglich die personifizierte Inkompetenz. :-) Übrigens wollte ich wissen, was da bei mir auf meinem Server von meinem Webspacehoster eingestellt ist und hab über phpinfo() entdeckt, daß bei 'default_charset' sowohl bei Local Value, als auch bei Master Value ein 'no value' steht.
Vorrang hat der HTTP-Header, doch lokal abgespeichert gibt es den nicht, sondern nur noch die Meta-Element-Angabe. Es ist also günstig, beides zu verwenden.
Ich dachte immer, das <meta http-equiv="content-type" content="text/html; charset=utf-8" />
reicht und ist auch das Einzige. OK, dann mache ich ab jetzt Beides. Nur wie? Was mich wieder zur Frage bringt, ob ich das mit der .htacess beeinflussen kann.
Wenn du damit die MySQL-Tabelle (mit MySQL ab Version 4.1) meinst, dann ist das im Prinzip unwichtig. Das ist, genauso wie die Angabe zur Kollation für die Datenbank, nur ein Default-Wert, der für neu hinzugefügte, untergeordnete Elemente herangezogen wird, wenn für diese nicht explizit etwas eingestellt wurde.
Ich meinte das, was unter phpMyAdmin für jeden Teil einer Tabelle unter "Kollation" eingestellt wird.
Am Ende zählt allein die Kodierung des einzelnen Feldes. Es kann sogar für jedes Feld eine andere Kodierung eingestellt werden.
Genau. Wir sprechen vom selben, oder?
Außerdem sollte bei der Kommunikation mit einem MySQL-Server eine Kodierung explizit ausgehandelt werden (mysql_set_charset() oder zur Not SET NAMES).
Auch diesbezüglich habe ich jetzt lange gegoogelt. Hab ich das richtig verstanden, daß ich das in jene Datei dazuschreibe, in der die Verbindung zum Server hergestellt wird? Diese Datei ist bei mir ausgelagert an eine Stelle vor dem Wurzelursprung meines Webspaces und würde _dann_ so aussehen:
<?php
$verbindung_server=mysql_connect("example.com","db_xyz","passwort");
if(!$verbindung_server)
{
die("Verbindung zum Server nicht möglich: ".mysql_error());
}
mysql_set_charset("utf8");
$verbindung_db=mysql_select_db("db_xyz");
if(!$verbindung_db)
{
die("Verbindung zur Datenbank nicht möglich: ".mysql_error());
}
?>
Kann ich das in dieser Datei und an dieser Stelle so lassen und erfüllt das dann den Zweck/die Aufagbe, auf die Du mich hingewiesen hast?
Mir ist noch kein System begegnet, dass diese accept-charset-Angabe noch benötigt, wenn mindestens eins von beiden (HTTP-Header oder Meta-Element-Angabe) gesetzt ist.
Wußte ich nicht, ich mache das _immer_ so, weil ich es hier bei SELFHTML so gelernt habe.
Wenn man mit einer halbwegs aktuellen Version phpMyAdmin direkt Daten bearbeitet, gibt es keine Probleme. Der PMA hat seine Hausaufgaben gemacht und weiß, wie er richtig mit dem MySQL-Server zu reden hat. Problem ergeben sich nur dann, wenn auf anderen Wegen eine Kommunikation mit dem MySQL-Server stattfindet, bei der vergessen wurde, sich auf eine zu verwendende Kodierung zu einigen.
Bei mir ist das lustig. Also ich habe, wie schon weiter oben geschrieben, die html-Datei mit dem Formular mittels <meta http-equiv="content-type" content="text/html; charset=utf-8" />
auf utf-8 gebracht, dann habe ich das <form action="/cgi-bin/auswertung.pl" method="post" accept-charset="utf-8">
im Formular selbst und als Kollation bei jedem Feld der Tabelle ebenfalls utf-8 eingestellt.
Übertrage ich jetzt zB das Wort 'Hügel' in die DB und sehe mir dann den Datensatz via phpMyAdmin an, dann sehe ich dort ein 'Hügel' stehen. Lese ich den Datensatz aus, wird aber wieder 'Hügel' ausgegeben. Umgekehrt, wenn ich direkt über phpMyAdmin das Wort 'Hügel' eingebe, steht es genau so in der DB, wird aber wiederum nicht korrekt ausgegeben, wenn es per php ausgelesen wird.
Ich nehme jetzt mal an, das liegt daran, daß ich bisher das mysql_set_charset("utf8");
nicht hatte, oder?
Hmmm ... jedes mal, wenn ich denke, ich hab das mit dem utf-8 endlich kapiert, lerne ich _wieder_ was Neues kennen und verstehe es erst recht nicht mehr. Danke schon jetzt für weitere Erklärungen!
Mit freundlichen Grüßen
Professor Hase
PS:Ich entschuldige mich schon _jetzt_ dafür, daß ich wahrscheinlich nicht mehr antworten werde auf dieses Posting. Das liegt aber nicht an meinem Desinteresse, sondern daran, daß dieser Beitrag längst im Archiv sein wird, wenn ich das nächste mal Zugang ins Internet habe.
PPS:Sorry, es mußt _jedes mal_ DU dran glauben, wenn ich anstehe bei mysql, php und utf-8. Ich sollte mal ein Bier schicken. ;-)