Announcement

Collapse
No announcement yet.

Utf-ã¼

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Utf-ã¼

    Moin,

    ich sehe vielleicht den Wald vor lauter Bäumen nicht... Ich habe beim Schreiben in die Datenbank bei den Umlauten Kaudawelsch...

    DB selber ist innoDB, komplett utf8_unicode_ci.
    DB wird mit mysqli objektorientiert gehandelt.
    Server: xampp auf mac os x 10.6
    Alle Dateien sind auch UTF-8.
    im Browser stehen auch an den richtigen Stellen:
    <?xml version="1.0" encoding="utf-8"?>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    Wenn ich ein ü in die Datenbank schreibe, wird daraus in PHPmyadmin und im Result-Set (einer erneuten Abfrage) der Datenbank ü.
    Wenn ich ein ü mit utf8_encode() in die Datenbank schreibe, wird daraus PHPmyadmin und im Result-Set (einer erneuten Abfrage) der Datenbank ü.

    Was läuft da schief?

    Lustiger Weise habe ich noch zum Testen ne Methode, die mir serialize($_POST) ausgibt. Da steht das ü richtig drinne.

    Grüße

  • #2
    Hallo,

    wichtig für die Kommunikation zwischen PHP und MySQL ist die MySQL-Clientverbindung! Diese muss unbedingt zum Encoding der Daten in PHP passen, ansonsten muss dort umkodiert werden und zwar sowohl beim Schreiben als auch beim Lesen! Die Kodierung der DB selbst ist nicht so wichtig, da MySQL hier ggfs. eine automatische Anpassung vornimmt.
    Was liefert dir denn ein
    PHP Code:
    echo mysql_client_encoding(); 
    ?

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Ohne deine Antwort jetzt zu kennen, vermute ich mal ein latin1 für die Clientverbindung. Du müsstest also beim Schreiben die Daten mit utf8_decode (von utf8 nach latin1) umwandeln UND beim Lesen mit utf8_encode (von latin1 nach utf8).

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Moinsen Falk,

        und danke für die immer schnelle Antwort :-)
        Tatsächlich ist es latin1. Ehm. Sollte man das modifizieren? Oder müsste ich jetzt in der Datenbank-Klasse jedes mal eine Fallunterscheidung machen?

        LG

        Comment


        • #5
          Hallo,

          du könntest z.B. in deiner Datenbankklasse beim Herstellen der Verbindung mit mysql_set_charset() explizit ein Charset für die Clientverbindung angeben, dann spartst du dir die Umkodiererei.

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Moinsen nochmal,

            der Code sieht nun so aus:

            PHP Code:
            if(self::$_db->get_charset() != 'utf8')
                        
            self::$_db->set_charset('utf8'); 
            Jetzt stehen die Werte richtig in der DB. AAAber der Browser stellt die nicht richtig da. Obwohl das hier:
            <?xml version="1.0" encoding="utf-8"?>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            drinne steht?

            Grüße

            Comment


            • #7
              Ich hab den Fehler gefunden.. Man müsste htmlentities auch sagen, in welchen zeichensatz die zeichen konvertiert werden sollen...

              PHP Code:
               htmlentities(self::unescape($value),ENT_QUOTES'UTF-8'

              Comment

              Working...
              X