Hey Leute,
ich habe folgendes Problem:
Ich will meine Seite von ISO 8859-1 auf utf-8 umstellen. Mit dem normalen Text hat das sehr gut funktioniert, nur mit dem Text, der aus der mysql-Datenbank geladen wird nicht…
Auf der Startseite von phpmyadmin steht bereits
MySQL-Zeichensatz: UTF-8 Unicode (utf8)
Zeichensatz / Kollation der MySQL-Verbindung ist auf utf8_general_ci eingestellt.
Auch in der Datenbank und den Tabellen habe ich die Kollation unter Operationen auf utf8_general_ci umgestellt.
Es hilft alles nichts, die Umlaute werden nicht richtig dargestellt…
Ich weiß nicht was ich noch probieren soll, ich hoffe ihr könnt mir weiterhelfen! Wie bekomme ich es hin, dass die Umlaute aus der mysql Datenbank auch korrekt auf der Seite dargestellt werden?
Was da steht, interessiert phpMyAdmin, und sonst niemanden.
Die Einstellung der Verbindungs-Kodierung ist, nomen est omen, verbindungs-spezifisch.
Bei deinen eigenen Scripten musst du sie also selber aushandeln, nachdem du die Verbindung hergestellt hast.
[quote=“chrisb”]
Die Einstellung der Verbindungs-Kodierung ist, nomen est omen, verbindungs-spezifisch.
Bei deinen eigenen Scripten musst du sie also selber aushandeln, nachdem du die Verbindung hergestellt hast.[/quote]
Hmm, okay, und wie mache ich das? Ich schätze mal ich brauche einen mysql Befehl, den ich in meinem php Skript ausführe und der der mysql Datenbank mitteilt in welchem Zeichensatz sie kommunizieren, oder? Aber leider hab ich sowas nicht gefunden… Vielleicht kannst du mir da weiterhelfen?
thx
Jap, hab ich drauf. Das meinte ich damit, dass ich die Seite auf utf8 umgestellt hab. Wie gesagt, nur die Daten aus der mysql Datenbank machen Probleme, die Daten, die ich direkt in den Code schreibe, auch Umlaute, machen keine.
Das ist genau das Problem, ich finde da zum Beispiel SET CHARACTER SET utf8.
Okay, vielleicht hilft mir das, aber wann muss ich das senden? Beim Verbindungsaufbau wenn ich mit define den Usernamen und das Passwort, … übertrage oder jedesmal wenn ich irgendeinen Query ausführe?
[quote=“glattwalzwerk”]In PHP gibt es zwei magische Befehle die dir weiterhelfen werden:
utf8_encode und utf8_decode. Damit klappt es bei mir auf jeden fall super.[/quote]
Ja, die kenn ich schon, aber dann muss ich die jedesmal verwenden wenn ich irgendwas aus der Datenbank ausgeben will… das ist irgendwie ziemlich umständlich…
Ah, es geht, einmal
$sql=“SET CHARACTER SET utf8”;
$result = mysql_query($sql) OR die(mysql_error());
direkt nach den defines und alles läuft!
Vielen Dank an euch, besonders chrisb.
ich habe das gleiche Problem und nach einigem Suchen immer noch keine Lösung finden können.
Alle Dateien sind in UTF-8 gespeichert.
Im Header steht:
Die Datenbank, sämtliche Tabellen und Felder sind utf8_unicode_ci (außerdem habe ich sie komplett geleert)
Ich kann Umlaute per phpmyadmin direkt in der DB speichern. Wenn ich sie aber über Formulare eingeben will, funktioniert es nicht.
Direkt nach dem Herstellen der DB-Verbindung führe ich folgendes aus:
mysql_set_charset(“utf8”,$db);
$sql=“SET CHARACTER SET utf8”;
$result = mysql_query($sql) OR die(mysql_error());
Ich habe auch den Cache zwischendurch mal geleert.
Wenn ich mit mysql_client_encoding den Zeichensatz auslese, steht dort “latin1”. Irgendwas stimmt also noch nicht.
Hat jemand eine Idee, was ich noch probieren könnte? So langsam weiß ich nichts mehr.
wenn du mysql_set_charset() korrekt verwendest, kann dieser teil weg:[quote=“Tina”]$sql=“SET CHARACTER SET utf8”;
$result = mysql_query($sql) OR die(mysql_error());[/quote]
wenn du mysql_set_charset() korrekt verwendest, kann dieser teil weg:[quote=“Tina”]$sql=“SET CHARACTER SET utf8”;
$result = mysql_query($sql) OR die(mysql_error());[/quote][/quote]
Naja, weil halt nichts funktioniert hat, dachte ich, ich probiere beides mal aus.
Ich denke schon, dass ich es korrekt anwende. Zur Sicherheit, so sieht mein connect aus:
$rueckgabe = true;
$db = @mysql_connect($hostid,$userid,$pass);
if (!$db) {
die("Verbindung zum Datenbank-Server konnte nicht hergestellt werden!");
$rueckgabe = false;
} else {
if(!@mysql_select_db($dbname)) {
die("Datenbank konnte nicht ausgewählt werden!");
$rueckgabe = false;
}
mysql_set_charset("utf8",$db);
}
return $rueckgabe;
Ich verstehe nicht, wieso ich beim Auslesen von mysql_client_encoding($db) die Ausgabe “latin1” bekomme. Wie kann ich das umstellen?
ich seh auch gerade, du has es ja richtig angegeben. Da hab ich wohl selbst bissel gepennt (bin ja auch erst vor paar stunden aufgestanden ).
Ich sehe spontan auch keine Fehler im Script.
An welcher Stelle führst du mysql_client_encoding($db) aus? innerhalb der Funktion und nachdem der neue charset zugewiesen wurde? außerhalb der Funktion wäre es ja unsinnig, da die $db variable ja nur innerhalb der funktion gültig wäre.
Ok, ich weiß nicht, was es jetzt war, aber mir ist aufgefallen, dass zumindest schon mal Umlaute in der Datenbank gespeichert werden. Dann hab ich mir mal den Code angesehen (es ist ein altes Projekt von mir, an dem ich länger nicht gearbeitet habe) und festgestellt, dass ich überall htmlentites() benutzt habe… dann kann die Ausgabe natürlich auch nicht funktionieren… warum auch immer ich das damals gemacht habe, vermutlich auch Probleme mit irgendeinem Charset. Auf jeden Fall läuft’s jetzt Vielen Dank, auch wenn ich nicht genau weiß, was mir jetzt geholfen hat