UTF-8 Website/Formular und MySQL Datenbank

2nd

2nd

Aktives Mitglied
Thread Starter
Dabei seit
25.07.2004
Beiträge
9.018
Reaktionspunkte
243
Moin,

ich habe eine Seite komplett auf UTF-8 umgestellt (Dokumente/Header) - funktioniert auch blendend mit den Umlauten und so.

Allerdings passieren bei der Übernahme von Benutzerdaten aus einem POST-Formular in eine MySQL-Datenbank lustige Sachen. Das Wort "würde" wird zu:

würde

Meine Datenbank läuft mit dieser Einstellung:

sql_charset.png


Soll ich das einfach auf UTF-8 umstellen? Und muss ich beim Formular noch den gültigen Zeichensatz einstellen? Die zwei Sachen werden es sein oder?

Brauche Input :)

Danke,

2nd
 
eigentlich konvertiert der mysql server das selber, wenn du als client sagst welche kodierung du verwendest...
kannst du mit einer "set names utf8" query machen...

wenn du jetzt nämlich nur den server auf utf8 umstelltst und nicht im programm sagst, dass du utf8 verwendest, dann geht das wieder schief, weil die default php einstellungen meistens latin1 ist...
 
Danke oneOeight :)

Also meine Seite funktioniert komplett in UTF-8 per PHP:

header('content-type: text/html; charset=utf-8');

Klappt auch prima bei der Anzeioge von Ös und Üs usw..

Ich brauche es nochmal langsam: Wann kriegt der SQL Server die Info zum konvertieren? Wenn meine Seite im UTF-8 Charset läuft und dann Daten per $_POST und PHP/Insert blahblah an die DB weitergereicht werden? Dann funktioniert das automatisch?

2nd
 
du musst nach dem herstellen der verbindung zum mysql server eine query mit "SET NAMES utf8;" machen, damit der mysql server weiß, dass du ihm die daten in utf8 schickst. den rest macht dann der mysql server.
 
Ahh, verstehe.

Ich habe mein Problem zwischenzeitlich hinbekommen. Schuld war folgende Zeile:

$comment = htmlentities(strip_tags($_POST['inputComment']), ENT_QUOTES);

Nehme ich die htmlentities-Funktion raus (die ich ja auch mit UTF-8 nicht mehr brauche) funktionieren die Umlaute und werden korrekt ausgegeben.

Allerdings stehen sie mit der Latin-1 Kodierung der DB wie oben auf dem Bild als Hieroglyphen in der DB. Stelle ich die Kodierung manuell auf UTF-8 im phpMyAdmin um, sieht man wieder Üs und Ös.

Kann ich davon ausgehen, dass das Zeichen, auch wenn es im phpMyAdmin nicht als Ü sichtbar ist, trotzdem korrekt als Bytefolge in der DB gespeichert wird, wenn LATIN-1 bei Sprache eingestellt ist?

2nd
 
sei vorsichtig mit den html entities, browser wie der IE kodieren da gerne auch mal umlaute mit.

mysql speichert ab 4.x alles intern als utf-8
das problem ist da halt die wandlung, d.h. du schickst da über eine latin1 verbindung utf8 umlaute und der server konvertiert die nicht...
 
oneOeight schrieb:
sei vorsichtig mit den html entities, browser wie der IE kodieren da gerne auch mal umlaute mit.

Hmpf, sorry, dass ich schon wieder nachfragen muss - was meinst Du damit? Wann wird was von wem kodiert?

oneOeight schrieb:
mysql speichert ab 4.x alles intern als utf-8
das problem ist da halt die wandlung, d.h. du schickst da über eine latin1 verbindung utf8 umlaute und der server konvertiert die nicht...

Also nach dem DB Connect einmal den SET NAME UTF-8 machen, wenn ich konsistent UTF-8 Daten empfangen und weiterverarbeiten will? Also wirklich konsequent ausführen, bei jedem Script, dass ich schreibe? Ohne Ausnahme?

2nd
 
2ndreality schrieb:
Hmpf, sorry, dass ich schon wieder nachfragen muss - was meinst Du damit? Wann wird was von wem kodiert?

ich hab halt neulich ein php skript gemacht, dass mit URLs arbeitet und IE kodiert halt die umlaute als html %irgendwas in den URLs. weiß nicht, ob der das gleiche auch bei text-feldern macht.

2ndreality schrieb:
Also nach dem DB Connect einmal den SET NAME UTF-8 machen, wenn ich konsistent UTF-8 Daten empfangen und weiterverarbeiten will? Also wirklich konsequent ausführen, bei jedem Script, dass ich schreibe? Ohne Ausnahme?

genau, probier es mal aus...
ansonsten müsstest du alle umlaut geschichten immer konvertieren...
 
oneOeight schrieb:
ich hab halt neulich ein php skript gemacht, dass mit URLs arbeitet und IE kodiert halt die umlaute als html %irgendwas in den URLs. weiß nicht, ob der das gleiche auch bei text-feldern macht.

Nein, da ist er konsistent. Ich habe ein Formular gebaut und schicke dort Umlaute rein - die kommen in der DB auch als UTF-8 an.

oneOeight schrieb:
ansonsten müsstest du alle umlaut geschichten immer konvertieren...

Hmm, wie gesagt, bei mir geht das ohne SET NAME. Ich stelle mal eine Überlegung an:

Man tippt etwas in ein Formular, also einen Umlaut, das Formular reicht den String an das $_POST Array weiter und von dort wird der String in die Datenbank geschrieben. Solange es ein String ist, ist es egal ob UTF-8 oder Latin oder sonstwas rauskommen soll. Und SQL speichert ab v4 wie Du sagst intern diesen String als UTF-8 nach dem INSERT blahblub.... Von daher ist das SET NAME doch überflüssig?!

UTF-8 kommt an, wird in die DB reingereicht und kommt so bei Bedarf wieder raus. Die Spracheneinstellung von phpMyAdmin ist anscheinend nur dazu da, dass das phpMyAdmon Frontend die Zeichen richtig kodiert darstellt, an dem, was in der DB liegt, ändert das nichts (gut so).

2nd
 
Zurück
Oben Unten