Sieger: PHP, PHPmyAdmin und Umlaute

Hallo

ich habe vor einigen Tagen einen Beitrag geschrieben, in dem es darum ging, dass htmlentities Umlaute zerschießt.
Dem Problem bin ich noch nicht wirklich auf die Schliche gekommen, doch im Rahmen meiner Weiterforschungen zu diesem Thema ist mir folgendes aufgefallen.

Aufgabenstellung: Umlaut "ä" in die Datenbank schreiben.

In PHPmyAdmin also den SQL "INSERT INTO beliebige_tabelle (text) VALUES ('ä')".
Und es ist dann tatsächlich ein "ä" im Feld "text" in der entsprechenden Tabelle.

Wenn ich in PHP den Code so habe:

mysql_query("INSERT INTO beliebige_tabelle (text) VALUES ('ä')");

Dann werden in die Datenbank wieder die verhunzten Umlaute geschrieben.

PHPmyAdmin muss also irgendeinen Filter vor den SQL setzen. Welcher ist das, denn den hätte ich auch gern? Der Quelltext ist für mich so unübersichtlich...

MfG
Sieger

  1. Das hört sich für mich an, als ob du versuchst iso-Daten in eine utf8 Tabelle zu schreiben oder umgekehrt. Das geht natürlich nicht. Was hast du denn genau vor? Willst du Daten importieren über PHPMyAdmin?

    1. Hi

      Das hört sich für mich an, als ob du versuchst iso-Daten in eine utf8 Tabelle zu schreiben oder umgekehrt.

      Meine Tabelle ist in latin_1_swedish_ci. Das war halt die Voreinstellung, bisher hatte ich damit keine Probleme.

      Das geht natürlich nicht. Was hast du denn genau vor? Willst du Daten importieren über PHPMyAdmin?

      Ursprünglich ging es mir darum, ein Text aus einem Formularfeld in die Datenbank zu schreiben. Die Probleme machten da nur die Umlaute.
      Mein Vorhaben war dann, die Umlaute per htmlentities umzuwandeln - und irgendwie machte htmlentities total falsche Umwandlungen.

      Ich arbeite mich gerade in die Thematik ein, und bin eben auf diese Gegebenheit gestoßen.

      Was wären denn Lösungen dafür? Steel hat ja vorgeschlagen, die Kodierung auf UTF-8 zu setzen.
      Ich verstehe nämlich nicht, warum es früher ging, einfach Umlaute per PHP in die Datenbank zu schreiben. Bei dem Gästebuch, das ich geschrieben habe, ging das ohne Weiteres, ich hab mich nicht um die Kodierung kümmern müssen. Was ist jetzt anders?

      MfG
      Sieger

      1. Überprüf mal, ob alles im gleichen Format geschrieben wird. Soll heissen, entweder UTF-8:

        • alle Dateien(PHP, HTML, JS?) in utf-8
        • Datenbanktabelle in utf-8
        • PHP-Skript sollte vor der ersten Ausgabe folgende Zeile ausführen:
          header("Content-type: text/html; charset=utf-8");

        oder alles in iso-Format:

        • alle Dateien(PHP, HTML, JS?) in ASCII
        • Datenbanktabelle in latin1
        • PHP-Skript sollte vor der ersten Ausgabe folgende Zeile ausführen:
          header("Content-type: text/html; charset=iso-8859-1");

        Ich hoffe das hat dir weitergeholfen...

        Stefan

  2. PHPmyAdmin muss also irgendeinen Filter vor den SQL setzen. Welcher ist das, denn den hätte ich auch gern? Der Quelltext ist für mich so unübersichtlich...

    Das sieht so aus, als ob die DB UTF-8 benutzt. Damit phpmyadmin auch.

    speicher doch mal deine php datei nicht in ANSI, Unicode or whatever sondern in UTF-8. Dein editor sollte das als einstellbare Option haben. Sogar Notepad kann das.

  3. echo $begrüßung;

    Dann werden in die Datenbank wieder die verhunzten Umlaute geschrieben.
    PHPmyAdmin muss also irgendeinen Filter vor den SQL setzen. Welcher ist das, denn den hätte ich auch gern? Der Quelltext ist für mich so unübersichtlich...

    Heute nur ganz kurz: Schau dir das Kapitel Character Set Support an, die Lösung steht schon auf der Einstiegsseite. Willst du mehr wissen schau ins hiesige Archiv, da stehen genug ausführliche Antworten zu Problematik drin.

    echo "$verabschiedung $name";