UTF-8, MySQL und PHP

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von scope, 18.01.2007.

  1. scope

    scope Thread Starter MacUser Mitglied

    Beiträge:
    4.081
    Zustimmungen:
    301
    Registriert seit:
    24.01.2005
    So, folgendes Problem:

    Ich habe einen String, der erfolgreich mit der folgenden Funktion als UTF-8 erkannt wird
    (Kommt aus einem Formular einer HTML-Seite mit UTF-8-Charset)

    PHP:
    function is_utf8$pString 
    {
       
    # From http://w3.org/International/questions/qa-forms-utf-8.html
       
       
    return preg_match('%^(?:
             [x09x0Ax0Dx20-x7E]            # ASCII
           | [xC2-xDF][x80-xBF]            # non-overlong 2-byte
           |  xE0[xA0-xBF][x80-xBF]        # excluding overlongs
           | [xE1-xECxEExEF][x80-xBF]{2}  # straight 3-byte
           |  xED[x80-x9F][x80-xBF]        # excluding surrogates
           |  xF0[x90-xBF][x80-xBF]{2}    # planes 1-3
           | [xF1-xF3][x80-xBF]{3}          # planes 4-15
           |  xF4[x80-x8F][x80-xBF]{2}    # plane 16
       )*$%xs'
    $pString);
    }
    Meine PHP-Dateien sind als UTF-8 gespeichert,
    und die MySQL Tabellen und Varchar-Spalten sind als utf8_unicode_ci kodiert.
    Trotzdem werden Sonderzeichen beim Ablegen in der Datenbank falsch angezeigt ( 'ö' => 'ö')
    Wenn ich den String vor der Ausgabe durch die utf8_decode-Funktion laufen lasse, ist die Ausgabe korrekt - wieso?
    Woran kann das liegen?
     
  2. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.803
    Zustimmungen:
    3.632
    Registriert seit:
    23.11.2004
    hast du auch eine set names utf8 query gemacht? damit die mysql verbindung auf utf8 steht?
     
  3. scope

    scope Thread Starter MacUser Mitglied

    Beiträge:
    4.081
    Zustimmungen:
    301
    Registriert seit:
    24.01.2005
    Das ist etwas, das ich noch nie gehört habe.. was bedeutet das genau?

    Edit:
    Super, habs gefunden!

    PHP:
    mysql_query"SET NAMES 'utf8'" );
    Besten Dank!
     
    Zuletzt bearbeitet: 18.01.2007
  4. 2nd

    2nd MacUser Mitglied

    Beiträge:
    8.902
    Zustimmungen:
    242
    Registriert seit:
    25.07.2004
    Wo werden die Sonderzeichen falsch angezeigt? Im phpMyAdmin?

    Andere Frage: Warum utf8_unicode_ci anstelle von utf8_general_ci?

    Hier stehen noch ein par nützliche Infos zu Zeichensätzen in MySQL DB: http://blog.koehntopp.de/archives/1424-MySQL-Zeichensatz-Grundlagen.html

    2nd
     
  5. scope

    scope Thread Starter MacUser Mitglied

    Beiträge:
    4.081
    Zustimmungen:
    301
    Registriert seit:
    24.01.2005
    phpMyAdmin und auf meiner Seite mit UTF-8-Charset.

    Andere Frage - warum nicht? :D

    Besten Dank!
    Aber es funktioniert ja jetzt auch!
     
  6. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.803
    Zustimmungen:
    3.632
    Registriert seit:
    23.11.2004
    das beantwortet die mysql doku ;)

     
  7. Jakob

    Jakob MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    Registriert seit:
    05.01.2004
    Nur zur Vervollständigung: Diese *_ci Einstellung, gibt nur die collation, also die Art der Sortierung an. Nicht die Kodierung.
     
  8. 2nd

    2nd MacUser Mitglied

    Beiträge:
    8.902
    Zustimmungen:
    242
    Registriert seit:
    25.07.2004
    phpMyAdmin kannst Du bzgl. der Anzeige-Kodierung umstellen, geht auf der Startseite. Dann zeigt er es auch richtig an.

    @oneOeight: Danke für den Hinweis (ich kenne die Doku und diese Seite ;)), aber ich wollte von Scope wissen, warum er utf8_unicode benutzt und nicht utf8_general, da utf8_general der Standard ist :)

    Jup.

    _ci = Case Insensitive
    _cs = Case Sensitive

    Gibt an ob das ä hinter dem a z. B. kommt.

    2nd
     
    Zuletzt bearbeitet: 19.01.2007
  9. mehlkelm

    mehlkelm MacUser Mitglied

    Beiträge:
    1
    Zustimmungen:
    0
    Registriert seit:
    10.11.2006
    Danke, hatte das Problem bei meiner lokalen server umgebung auch und "SET NAMES 'utf8'" hat es gelöst. Da stellt sich bei mir jedoch die Frage: Bei meinem debian server funktioniert alles bestens, ohne diese query. Wieso?
    Ist möglicherweise das debian mysql paket so kompiliert, dass es das nicht mehr braucht?
     
Die Seite wird geladen...

Diese Seite empfehlen