Hallo
Offensichtlich benutzt eine der Übertragungsstationen einen falschen Charset.
Sowohl das HTML-Dokument mit dem Formular, die Datenbank selbst und auch die von PHP etablierte Verbindung mit dem DB-Server sollten die gleiche Zeichenkodierung benutzen. Kontrolliere das mal bitte.
Da ich den PHP-Teil immer als eine Art Puzzle einbinde, haben alle Seiten immer den gleichen Header etc. Daher sollte sich doch eigentlich das Charset eigentlich nicht ändern können.
Ich meine nicht die meta-Angabe im Dokument! prüfe in deinem Editor, mit welchem Charset die HTML-Vorlagen und die Skripte gespeichert werden. Idealerweise -- wenn auch nicht zwingend -- ist das UTF-8. Der Webserver deines Hosters muss das natürlich auch so ausliefern können.
Ebenso bei der Tabelle. Das Charset der Tabelle entspricht auch dem Charset aller anderen knapp Tabellen.
Wenn wir davon ausgehen, dass UTF-8 für die Skripte und HTML-Quelltexte verwendet wird (das gilt analog auch für einen anderen Charset), sollten Tabellen und Felder, die Text aufnehmen, ebenfalls die UTF-8-Codierung verwenden. Zusätzlich gibst du bei der Verbindungsaufnahme mit dem DB-Server UTF-8 als zu verwendendem Charset vor. Ich mache das immer (innerhalb einer Funktion) mit einem allerersten Query, den ich direkt nach erfolgter Verbindungsaufnahme absetze.
function auge_connect_dbserver($db) {
$s = mysql_connect($db["host"],$db["user"],$db["pass"]);
$t = mysql_select_db($db["dbase"],$s);
if ($s===false or $t===false) {
return false;
} else {
# UTF-8 erzwingen
$q = "SET NAMES utf8";
$a = mysql_query($q,$s);
if ($a===false) {
return false;
} else {
return $s;
}
}
} # Ende: auge_connect_dbserver
Die Verbindung wird aufgebaut und mit SET NAMES utf8
wird als erstes der Charset der verbindung erzwungen. Klappt irgendwas nicht, dann gibt die Funktion false
zurück, ansonsten die Kennung der Verbindung.
"Draußen" im Skript rufe ich diese Funktion auf, prüfe dann den Rückgabewert und lasse danach das Skript ablaufen oder eine Fehlermeldung ausgeben.
<?php
// irgendwelche includes
$sql = auge_connect_dbserver($db);
if ($sql===false) {
// Fehlermeldung generieren
} else {
// Datenbankabfragen, Verarbeitung, Generierung der Ausgabe der Daten
}
// Ausgabe der generierten Daten bzw. der Fehlermeldung innerhalb eines HTML-Gerüsts
?>
Der einzige Unterschied besteht darin, dass ich das Formular wiederum über Ajax anzeigen lasse. In diesem Script werden keine Angaben bezüglich irgendwas gemacht, da ja Styles, Charset und Datenbank-Verbindungen ja eigentlich schon festgelegt sind.
Auch und besonders(!) deine JavaScript-Skripte sollten UTF-8 als Charset verwenden, da bei Ajax, so es keine expliziten anderen Vorgaben gibt, automatisch von UTF-8 als Codierung ausgegangen wird.
Tschö, Auge
Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
Terry Pratchett, "Wachen! Wachen!"
Veranstaltungsdatenbank Vdb 0.3