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.085
    Zustimmungen:
    301
    Mitglied 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:
    48.967
    Zustimmungen:
    4.125
    Mitglied 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.085
    Zustimmungen:
    301
    Mitglied 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.952
    Zustimmungen:
    242
    Mitglied 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.085
    Zustimmungen:
    301
    Mitglied 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:
    48.967
    Zustimmungen:
    4.125
    Mitglied seit:
    23.11.2004
    das beantwortet die mysql doku ;)

     
  7. Jakob

    Jakob MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    Mitglied 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.952
    Zustimmungen:
    242
    Mitglied 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 Registriert

    Beiträge:
    1
    Zustimmungen:
    0
    Mitglied 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...