Pit: mysql: Mich hat das Umlautproblem erwischt

Hallo,

beim Eintrag in meine DB über ein Formular, das in einem Jquery UI-Dialogfenster eingeblendet wird, erhalte ich Hieroglyphen anstelle von Umlauten.

Erstmal Codierung gecheckt: <meta http-equiv="content-type" content="text/html; charset=utf-8" />

Sollte in Ordnung sein. Da aber meine DB und auch die Tabellen latin1_general_ci sind, habe ich es auchmal mit folgendem Header versucht: <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

Dasselbe Ergebnis. Also wieder zurück auf den UTF-8 Header gewechselt und eine UTF-8 Datenbank erzeugt. Aber schon wider dasselbe Ergebnis.

Woran kanns denn noch liegen? Am UI-Dialog?

Pit

P.S: ich muß dazu sagen, dass ich schon lange mit mysql-Datenbanken arbeite, aber noch nie Umlautprobleme hatte. Normalerweise arbeite ich (und dafür gibts gute Gründe) mit latin1_general_ci und charset=ISO-8859-1

  1. Hallo,

    Dasselbe Ergebnis. Also wieder zurück auf den UTF-8 Header gewechselt

    Sicher, dass du den Inhalt gewechselt hast und nicht nur das Etikett?

    Gruß
    Kalk

    1. Hi Kalk,

      Sicher, dass du den Inhalt gewechselt hast und nicht nur das Etikett?

      Nein, ich habe dabei einen Fehler gemacht, denn ich blieb bei PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES latin1"

      Aber ganz eigentlich würde ich gerne in Summe bei latin1 bleiben, wenn das geht. ich vermute, wie gesagt, dass JqueryUI dabei Probleme macht.

      Pit

  2. Hallo,

    beim Eintrag in meine DB über ein Formular, das in einem Jquery UI-Dialogfenster eingeblendet wird, erhalte ich Hieroglyphen anstelle von Umlauten.

    Erstmal Codierung gecheckt: <meta http-equiv="content-type" content="text/html; charset=utf-8" />

    Sollte in Ordnung sein. Da aber meine DB und auch die Tabellen latin1_general_ci sind, habe ich es auchmal mit folgendem Header versucht: <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

    Dasselbe Ergebnis. Also wieder zurück auf den UTF-8 Header gewechselt und eine UTF-8 Datenbank erzeugt. Aber schon wider dasselbe Ergebnis.

    Woran kanns denn noch liegen? Am UI-Dialog?

    Pit

    P.S: ich muß dazu sagen, dass ich schon lange mit mysql-Datenbanken arbeite, aber noch nie Umlautprobleme hatte. Normalerweise arbeite ich (und dafür gibts gute Gründe) mit latin1_general_ci und charset=ISO-8859-1 und PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES latin1"

    Ich würde auch gerne bei latin1 bleiben, aber ich vermute, mit Jquery UI gibts da irgendwelche Probleme, kann das sein?

    1. Hello,

      Ich würde auch gerne bei latin1 bleiben, aber ich vermute, mit Jquery UI gibts da irgendwelche Probleme, kann das sein?

      siehe mein anderes Posting...

      JavaScript und damit jQuery arbeiten grundsätzlich in UTF8. Wenn die nun eingebettet werden in eine Webseite, die mit ISO-8859-x arbeitet, passt das schon mal nicht. Da musst Du an dieser Stelle schon transformieren. Und wenn denn Teile von jQuery-Popups auch noch direkt mit dem Backend korrespondieren (AJAX), dann muss das Backend passend darauf reagieren und transformieren.

      Und die Backend <-> DB Connection auch wieder ...

      Es erscheint dann schlussendlich also wenig sinnvoll, wenn man NICHT einheitlich utf-8 verwendet.

      BTW:
      ich persönlich bin der Meinung, dass UTF-8 eines Tages zum totalen Datenverlust führen wird, spätestens nach dem nächsten Einschalg eines Asteroiden ;-P

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es!
      Das Leben selbst ist der Sinn.
  3. Hello,

    beim Eintrag in meine DB über ein Formular, das in einem Jquery UI-Dialogfenster eingeblendet wird, erhalte ich Hieroglyphen anstelle von Umlauten.

    Erstmal Codierung gecheckt: <meta http-equiv="content-type" content="text/html; charset=utf-8" />

    Sollte in Ordnung sein. Da aber meine DB und auch die Tabellen latin1_general_ci sind, habe ich es auchmal mit folgendem Header versucht: <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

    Dasselbe Ergebnis. Also wieder zurück auf den UTF-8 Header gewechselt und eine UTF-8 Datenbank erzeugt. Aber schon wider dasselbe Ergebnis.

    Woran kanns denn noch liegen? Am UI-Dialog?

    Das Problem liegt irgendwo*) in der Kette. Du musst grundsätzlich meistens unterscheiden zwischen Content-Encoding und Content-Transfer-Encoding. Wenn eine Kodierung oder Rückkodierung (sofern möglich) vergessen wird, knallt es eben.

    Wenn deine Webseite in UTF-8 arbeitet, dann passt das schon mal generell zu den Popups durch jQuery. Wenn diese nun auch noch direktes AJAX betreiben (auch in UTF-8), dann sollte es hier schon mal keine Transformationsprobleme geben.

    Nun sollte aber auch auf dem Server die Verbindung zwischen der Skriptsprache (PHP?) und der Datenbank passen. Auch hier müssen wieder alle Kodierungsparameter zusammenpassen. Speicherkodierung der DB, Transfer-Encoding und Arbeitskodierung der API (PHP?).

    Hinzu kommt, dass MySQL auch selbstständig Transformationen vornehmen kann, wenn die passenden Einstellungen gewählt wurden.

    Ich vermute mal, dass Dir Dedlfix dazu in zwei bis drei knappen Sätzen noch den richtigen Weg weisen kann. Das ist eines seiner Spezialthemen ;-)

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Hi TS,

      Das Problem liegt irgendwo*) in der Kette.

      Da hst Du Recht. Mit PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4" läuft alles prima.

      Das ist aber eigentlich nciht die Codierung, die ich haben wollte...

      Wenn deine Webseite in UTF-8 arbeitet, dann passt das schon mal generell zu den Popups durch jQuery. Wenn diese nun auch noch direktes AJAX betreiben (auch in UTF-8), dann sollte es hier schon mal keine Transformationsprobleme geben.

      Seltsam, in einem anderen Projekt nutze ich alles Mögliche aus JQuery und Ajax. Nur Dialoge (Popups) nutze ich nicht, da nutze ich Scripte, die auf JQuery aufsetzen, z.b. irgendwelche Lightboxen. Und alles läuft.

      Und jetzt, wo ich mal UI-Dialog nutze, muß ich komplett auf utf-8 umstellen, das ist sehr schade für mich.

      Ich vermute mal, dass Dir Dedlfix dazu in zwei bis drei knappen Sätzen noch den richtigen Weg weisen kann. Das ist eines seiner Spezialthemen ;-)

      Und nicht sein einziges "Spezialthema" 😉

      Pit

    2. Tach!

      Ich vermute mal, dass Dir Dedlfix dazu in zwei bis drei knappen Sätzen noch den richtigen Weg weisen kann. Das ist eines seiner Spezialthemen ;-)

      Das Thema ist zu umfangreich für zwei bis drei knappe Sätze. Generell sollte man sich heutzutage nicht mit den Unzulänglichkeiten von ISO-8859-X/LatinX abgeben und stattdessen UTF-8 nehmen, das aber konsequent und richtig. Wenn man es nicht konsequent macht, ist man auch bei ISO/Latin nur per Zufall auf dem richtigen Pfad unterwegs.

      Generelle Aussage: Jedes System muss mit der Zeichenkodierung umgehen können, solange es die Daten nicht nur unverändert durchreicht. Ein System muss dem nachfolgenden Verarbeitungsschritt die Kodierung mitteilen und die Daten dann auch so kodiert dorthin senden.

      Ausführlich: Zeichenkodierung
      Allgemeine Informationen auf der dortigen Seite, konkrete Vorgehensweisen für die verwendeten Systeme auf den dort am Anfang verlinkten Seiten.

      dedlfix.

  4. Hallo,

    beim Eintrag in meine DB über ein Formular, das in einem Jquery UI-Dialogfenster eingeblendet wird, erhalte ich Hieroglyphen anstelle von Umlauten.

    Wenn die Daten per Ajax gesendet werden ist das immer utf-8, egal mit welcher Kodierung die darunterliegende Seite ausgeliefert wurde.

    MfG

    1. Hello,

      beim Eintrag in meine DB über ein Formular, das in einem Jquery UI-Dialogfenster eingeblendet wird, erhalte ich Hieroglyphen anstelle von Umlauten.

      Wenn die Daten per Ajax gesendet werden ist das immer utf-8, egal mit welcher Kodierung die darunterliegende Seite ausgeliefert wurde.

      Nicht, wenn sie vorher (warum auch immer -> Doofe Frameworks) umkodiert wurden!

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es!
      Das Leben selbst ist der Sinn.
      1. Hello,

        beim Eintrag in meine DB über ein Formular, das in einem Jquery UI-Dialogfenster eingeblendet wird, erhalte ich Hieroglyphen anstelle von Umlauten.

        Wenn die Daten per Ajax gesendet werden ist das immer utf-8, egal mit welcher Kodierung die darunterliegende Seite ausgeliefert wurde.

        Nicht, wenn sie vorher (warum auch immer -> Doofe Frameworks) umkodiert wurden!

        So doof kann kein Framework sein, was mich daran hindern würde, die Fehlersuche genau hier zu beginnen.

        MfG

        1. Hello,

          Nicht, wenn sie vorher (warum auch immer -> Doofe Frameworks) umkodiert wurden!

          So doof kann kein Framework sein, was mich daran hindern würde, die Fehlersuche genau hier zu beginnen.

          Die Fehlersuche kann ja ohnehin nur dort stattfinden, wo man Schnittstellen/Messstellen dafür hat oder schaffen kann.

          Liebe Grüße
          Tom S.

          --
          Es gibt nichts Gutes, außer man tut es!
          Das Leben selbst ist der Sinn.
          1. Hello,

            Nicht, wenn sie vorher (warum auch immer -> Doofe Frameworks) umkodiert wurden!

            So doof kann kein Framework sein, was mich daran hindern würde, die Fehlersuche genau hier zu beginnen.

            Die Fehlersuche kann ja ohnehin nur dort stattfinden, wo man Schnittstellen/Messstellen dafür hat oder schaffen kann.

            Selbstverständlich kann man feststellen, mit welcher Kodierung Schriftzeichen den Browser in Richtung Webserver verlassen. Man sieht das ja an der Prozentkodierung welche Bytes da rausgehen. Man muss halt wissen wo man hinguckt, z.B. in die Konsole oder in die Adresszeile und. ggf. wird dafür die Requestmethode einfach mal temporär auf GET umgestellt.

            Das sind sozusagen Untersuchungen erster Ordnung, der Schrei nach einer Schnittstelle kommt da noch lange nicht.

            MfG

            1. Hello,

              verstehe ich jetzt nicht.

              Die Adresszeile des Browsers wäre doch eine klassischd Schnittstelle.

              Liebe Grüße
              Tom S.

              --
              Es gibt nichts Gutes, außer man tut es!
              Das Leben selbst ist der Sinn.
  5. hi,

    P.S: ich muß dazu sagen, dass ich schon lange mit mysql-Datenbanken arbeite, aber noch nie Umlautprobleme hatte. Normalerweise arbeite ich (und dafür gibts gute Gründe) mit latin1_general_ci und charset=ISO-8859-1

    Falls Du da weiterhin dran festhalten und die Daten mit AJAX senden willst, könntest Du eine ISO-gerechte Prozentkodierung mit der JS Funktion escape() erzwingen. Das € Zeichen wird da z.B. als %u20AC (Codepoint) gesendet und das kleine ä als %E4 (ISO Byte). Also einmal wird der Codepoint prozentkodiert und andernfalls (normalerweise) die Oktettenwertigkeit, inwieweit PHP damit zurechtkommt, musst Du ausprobieren.

    MfG