Benutzerdefinierte Suche

UTF-8, MySQL und PHP

  1. scope

    scope Thread StarterMacUser Mitglied

    Mitglied seit:
    24.01.2005
    Beiträge:
    4.085
    Zustimmungen:
    301
    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?
     
    scope, 18.01.2007
  2. oneOeight

    oneOeightMacUser Mitglied

    Mitglied seit:
    23.11.2004
    Beiträge:
    48.181
    Zustimmungen:
    3.899
    hast du auch eine set names utf8 query gemacht? damit die mysql verbindung auf utf8 steht?
     
    oneOeight, 18.01.2007
  3. scope

    scope Thread StarterMacUser Mitglied

    Mitglied seit:
    24.01.2005
    Beiträge:
    4.085
    Zustimmungen:
    301
    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!
     
    scope, 18.01.2007
  4. 2nd

    2ndMacUser Mitglied

    Mitglied seit:
    25.07.2004
    Beiträge:
    8.901
    Zustimmungen:
    242
    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 StarterMacUser Mitglied

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

    Andere Frage - warum nicht? :D

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

    oneOeightMacUser Mitglied

    Mitglied seit:
    23.11.2004
    Beiträge:
    48.181
    Zustimmungen:
    3.899
    das beantwortet die mysql doku ;)

     
    oneOeight, 19.01.2007
  7. Jakob

    JakobMacUser Mitglied

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

    2ndMacUser Mitglied

    Mitglied seit:
    25.07.2004
    Beiträge:
    8.901
    Zustimmungen:
    242
    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
     
  9. mehlkelm

    mehlkelmMacUser Mitglied

    Mitglied seit:
    10.11.2006
    Beiträge:
    1
    Zustimmungen:
    0
    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?
     
    mehlkelm, 22.02.2007
Die Seite wird geladen...
Ähnliche Themen - UTF MySQL PHP
  1. malah
    Antworten:
    3
    Aufrufe:
    1.166
    beatles
    10.02.2017
  2. maceis
    Antworten:
    4
    Aufrufe:
    5.998
    Atarimaster
    27.07.2008
  3. b.legt210
    Antworten:
    5
    Aufrufe:
    902
    worshipper
    11.04.2007
  4. 2nd
    Antworten:
    8
    Aufrufe:
    3.165
  5. Steglich
    Antworten:
    3
    Aufrufe:
    1.250
    Steglich
    27.04.2006