UTF-8 Website/Formular und MySQL Datenbank

Diskutiere mit über: UTF-8 Website/Formular und MySQL Datenbank im Datenbanksysteme für das Web Forum

  1. 2nd

    2nd Thread Starter MacUser Mitglied

    Beiträge:
    8.902
    Zustimmungen:
    242
    Registriert seit:
    25.07.2004
    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:

    [​IMG]

    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
     
  2. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.776
    Zustimmungen:
    3.629
    Registriert seit:
    23.11.2004
    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...
     
  3. 2nd

    2nd Thread Starter MacUser Mitglied

    Beiträge:
    8.902
    Zustimmungen:
    242
    Registriert seit:
    25.07.2004
    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
     
  4. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.776
    Zustimmungen:
    3.629
    Registriert seit:
    23.11.2004
    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.
     
  5. 2nd

    2nd Thread Starter MacUser Mitglied

    Beiträge:
    8.902
    Zustimmungen:
    242
    Registriert seit:
    25.07.2004
    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
     
  6. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.776
    Zustimmungen:
    3.629
    Registriert seit:
    23.11.2004
    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...
     
  7. 2nd

    2nd Thread Starter MacUser Mitglied

    Beiträge:
    8.902
    Zustimmungen:
    242
    Registriert seit:
    25.07.2004
    Hmpf, sorry, dass ich schon wieder nachfragen muss - was meinst Du damit? Wann wird was von wem kodiert?

    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
     
  8. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.776
    Zustimmungen:
    3.629
    Registriert seit:
    23.11.2004
    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.

    genau, probier es mal aus...
    ansonsten müsstest du alle umlaut geschichten immer konvertieren...
     
  9. 2nd

    2nd Thread Starter MacUser Mitglied

    Beiträge:
    8.902
    Zustimmungen:
    242
    Registriert seit:
    25.07.2004
    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.

    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
     
Die Seite wird geladen...
Ähnliche Themen - UTF Website Formular Forum Datum
Zeilenumbruch aus dem Formular als <br /> in SQL speichern? Datenbanksysteme für das Web 02.10.2006

Diese Seite empfehlen

Benutzerdefinierte Suche