Hallo
MySQL-DB ursprünglich mit Kollation 'latin1_swedish_ci' für Datenbank, Tabelle und Felder.
HTML-Skript ursprünglich im head: <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
Beispiel: Eintrag mit "äöüß" in "alte" DB mit Kollation 'latin...' gemacht. Kollation für DB, Tabelle und Feld auf 'utf8_unicode_ci' geändert. In HTML-Seite ist im meta-tag charset=utf-8 angegeben.
Trotzdem stehen da hartnäckig ���� statt äöüß.
Was mache ich wohl falsch? Bzw. wie muss ich das anders angehen?
Das Problem ist, dass in die alten Datensätze in der DB immer noch mit ISO-8859-15 kodiert sind. Die Seite wird (offensichtlich mit utf-8 ausgeliefert und die Inhalte aus der DB haben nun nicht mehr die passende Kodierung.
Direkt nach dem Aufbau der Verbindung mit dem DB-Server kannst du dem Server den gewünschten Zeichensatz mitteilen. Beispielsweise mit folgender Funktion:
function connect_dbserver($db) {
# Datenbankserver kontaktieren
$s = mysql_connect($db["host"],$db["user"],$db["pass"]);
# Datenbank auswählen
$t = mysql_select_db($db["dbase"],$s);
if ($s===false or $t===false)
{
# Server konnte nicht kontaktiert werden bzw.
# Datenbank konnte nicht ausgewählt werden.
return false;
}
else
{
# Teile dem DB-Server mit, dass er die Ergebnisse
# der Abfragen in utf-8 ausliefern soll.
$q = "[code lang=sql]SET NAMES utf8
~~~";
$a = mysql\_query($q,$s);
if ($a===false)
{
# Abfrage ist fehlgeschlagen
return false;
}
else
{
# Absetzen des Queries war erfolgreich,
# es wird die Verbindungskennung zur weiteren
# Verwendung aus der Funktion zurueckgegeben.
return $s;
}
}
} # Ende: connect\_dbserver($db)[/code]
Alle später im Skript ausgeführten Abfragen werden nun, unabhängig von ihrer in der DB vorliegenden Kodierung, in utf-8 zurückgegeben.
Tschö, Auge
--
Die deutschen Interessen werden am Liechtenstein verteidigt.
[Veranstaltungsdatenbank Vdb 0.2](http://termindbase.auge8472.de/)