emoji Icons im MySQL DB speichern - Zeichensatz problemchen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Thallius schrieb:

    Oder mach mal ein binary Feld aus dem SQL Feld wo das drin steht. Dann siehst du den hexwert ja auch


    brauch er doch nicht. zm überprüfen einfach ein select drüber laufen lassen mit HEX() oder CAST(). dann weiß er schon mal in welchem format die daten gespeichert werden.
    falls das falsche format drin ist dann weiß er dass er mit dem debggen früher ansetzen muss (zb beim reinschreiben), ansonsten liegts einzig und allein an der ausgabe.
  • Also...

    Oder mach mal ein binary Feld aus dem SQL Feld wo das drin steht. Dann siehst du den hexwert ja auch


    Das habe ich mal gemacht, die Emojis stehen dann nicht mehr als ? sondern binär in der Datenbank. Bei meiner Ausgabe werden die Emojis dann auch dargestellt.
    Aber das kann ja natürlich nicht der gewünschte Lösungsweg sein.

    @gritsch, ich habe versucht die Daten direkt als HEX auszugeben, aber es hat mit der Abfrage nicht geklappt (ich weiß nicht genau wie es sein sollte, das Thema "Datenbanken" kommt erst jetzt in meinem Studium vor :) ).

    Ich habe mir zwei Funktionen aus dem Internet gesucht, einmal strToHex und hexToStr (Quelle).
    Bevor ich den Text vom iPhone in die Datenbank eintrage rufe ich die Funktion strToHex auf und trage sie danach in die Datenbank ein.
    Bei der Ausgabe rufe ich dann hexToStr auf und es wird perfekt ausgeben.

    Nun kann es ja aber sein das auch normaler Text in der Datenbank steht, dann bringt die Funktion hexToStr ja nichts, weil kein Hex-Wert vorliegt, um das zu überprüfen benutze ich eine if-else-Abfrage mit ctype_xdigit.

    PHP-Quellcode

    1. if (ctype_xdigit($text)) {
    2. echo hexToStr($text);
    3. } else {
    4. echo $text;
    5. }


    Also ich habe dann auch längere Texte vom iPhone eingetragen mit Emojis sowie normale Texte direkt in die Datenbank und das funktionierte alles wunderbar. Die Frage ist jetzt nur ob das eine bzw. die richtige Lösung ist. Immerhin funktioniert es jetzt :).
  • warum willst du irgendwelche zeichen in hex umwandeln?


    Du hast Recht, totaler Blödsinn^^, macht irgendwie keinen Sinn.


    zm überprüfen einfach ein select drüber laufen lassen mit HEX() oder CAST(). dann weiß er schon mal in welchem format die daten gespeichert werden.


    Kannst du mir sagen wie ich HEX oder CAST hierauf anwende?

    PHP-Quellcode

    1. $query = "SELECT * FROM `test`";
    2. $sql = mysql_query($query) or die(mysql_error());
    3. while ($ds = mysql_fetch_object($sql)){
    4. $text = $ds -> text;
    5. echo $text;
    6. }
  • Okay, die Emojis werden wohl richtig in die Datenbank geschrieben, bei der neuen SQL-Abfrage wird bei einem aus dem iphone eingetragenem ":)", welches in der Datenbank ein ? ist, F09F988A.

    Aber wie geht es jetzt weiter? Ich könnte ja jetzt F09F988A in ein String umwandeln, was auch funktioniert, aber das Gespräch hatten wir ja schon :D.
  • Ja in phpmyAdmin können die Emojis nicht dargestellt werden, wird also als ? dargestellt. Dementsprechend wurde das auch in einer Ausgabe als ? dargestellt.

    Deswegen habe ich jetzt getestet was wirklich hinter dem ? steckt und mithilfe von SELECT HEX(text) FROM test; kam F09F988A raus.
  • Wie kommst du darauf? In welcher Ausgabe? Wohin ausgegeben mit was?


    Wurde "glaube" in dem Thread geschrieben das es in der Datenbank nicht dargestellt werden kann.

    In einer einfachen Ausgabe in einer php Datei mit:

    PHP-Quellcode

    1. $query = "SELECT * FROM test";
    2. $sql = mysql_query($query) or die(mysql_error());
    3. while ($ds = mysql_fetch_object($sql)){
    4. $text = $ds -> text;
    5. echo $text."<br />";
    6. }


    Wenn ich mir das als HEX ausgeben lasse mit SELECT HEX(text) as text FROM test und in der Ausgabe eine Funktion namens hexToStr benutzen würde, dann würden die richtigen Emojis angezeigt werden und keine ?

    PHP-Quellcode

    1. $query = "SELECT HEX(text) as text FROM test";
    2. $sql = mysql_query($query) or die(mysql_error());
    3. while ($ds = mysql_fetch_object($sql)){
    4. $text = $ds -> text;
    5. echo hexToStr($text)."<br />";
    6. }
  • Geil es funktioniert endlich :thumbsup:

    Mit mysql_query("SET NAMES 'utf8mb4'"); und htmlentities($text, ENT_QUOTES, "UTF-8") werden mir endlich die emojis angezeigt :).

    Bzw. ich glaube es geht auch nur mit mysql_query("SET NAMES 'utf8mb4'"); und ohne htmlentities, diese Aussage ist aber ohne Gewähr^^