Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie mit native smileys umgehen?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wie mit native smileys umgehen?

    Hallöchen,

    ich habe gerade gemerkt das es native Smileys gibt und konnte diese auch über meinen chat versenden...
    Jetzt müsste ich natürlich mein Skript entsprechend anpassen um einmal den Smiley entsprechend in der Datenbank als Nachricht speichern zu können als natürlich bei der Ausgabe wieder darzustellen.

    Interessanterweise gibs in der Console und im xhr immer nur den zusehenden Smiley, wird dann wohl base64 oder sowas sein?
    Nun ich hoffe ihr könnt mir da weiter helfen, habe da gerade keine Ahnung wo ich ansetzten soll...

    MfG: Paykoman

    :: CHECKLISTE zur Lösung des Problems ::

  • #2
    Ein Emoji ist einfach nur ein Zeichen im UTF-8 Zeichensatz. Behandle UTF-8 richtig, dann behandelst du auch automatisch Emojis richtig.

    Kommentar


    • #3
      zb: https://www.fileformat.info/info/uni...263a/index.htm
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Naja bisher hatte ich mit utf-8 keine Probleme, da ich eh von Anfangan auf diese setzte.
        Aber ich denke die Formatierung der Datenbank ist das Problem, habe auch schon ein wenig ausprobiert und dort vorgeschlagene Formatierungen gesetzt, aber ich kann den Smiley nicht dort einfügen

        Code:
        Warning: #1366 Falscher string-Wert: '\xF0\x9F\x98\x8E' für Feld 'txt' in Zeile 1
        Ausprobiert habe ich: utf8mb4_bin, utf8_general_ci, utf8_bin
        Ich lass was von blob aber das gibts nicht

        ::EDIT::
        Ahh mit blob war wohl der Feldtyp als solches gemeint... Hmm, ist das Sinnvoll?
        Zurzeit habe ich diese als MEDIUMTEXT

        Kommentar


        • #5
          PHP-Code:
          $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4''root''', [
              
          PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
          ]);

          $db->query('
              CREATE TEMPORARY TABLE test (
                  id INT NOT NULL AUTO_INCREMENT,
                  foo VARCHAR(255) NOT NULL,
                  PRIMARY KEY (id)
              ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
          '
          );

          $stmt $db->prepare('INSERT INTO test (foo) VALUES (?)');
          $stmt->execute(["☺"]);


          $result $db->query('SELECT id, foo FROM test');
          $row $result->fetch(PDO::FETCH_NUM);

          header('Content-Type: text/plain; charset=utf-8');
          echo 
          implode(', '$row); 
          Ausgabe:
          Code:
          1, ☺

          Kommentar


          • #6
            Gut das mit der Datenbankverbindung etc. habe ich auch schon gesehen...
            Aber das mein Skript es speichern kann brauch ich ja erst dann gucken wenn es über PMA klappt oder nicht?

            Wenn ichs über PMA nicht speichern kann brauch ich ja nicht schauen das die Seite es schafft...

            Ist evtl. MyISAM das Problem?

            Kommentar


            • #7
              Geht bei mir problemlos auch mit phpMyAdmin.

              Kommentar


              • #8
                Zitat von hellbringer Beitrag anzeigen
                Geht bei mir problemlos auch mit phpMyAdmin.
                Ich habe deine Temporäre Tabelle fix als feste Tabelle erstellt, es funktioniert nicht !

                Warning: #1366 Falscher string-Wert: '\xF0\x9F\x98\x8E' für Feld 'foo' in Zeile 1

                Kommentar


                • #9
                  "funktioniert nicht" ist halt keine brauchbare Fehlerbeschreibung.

                  BItte Tabellenstruktur als SQL-Code posten und auch die konkret fehlgeschlagene SQL-Abfrabe.

                  Nach 438 Beiträgen im Forum sollte man das langsam wissen.

                  Kommentar


                  • #10
                    Ich benutzte deine Tabelle 'test', sagte ich ja oben das ich diese zum testen erstellt habe.
                    PMA -> Einfügen -> smiley von der Setie copy & paste und speichern, gleich obige Fehlermeldung....

                    Aber dein Smiley ist iwie auch komisch (funktioniert aber bei mir auch), funktioniert es bei Dir mit diesem, immer noch?

                    Interessant ist wenn ich den Smiley mit strg c+v einfüge und speichern will funktioniert es nicht, nehm ich aber den Code : "\xF0\x9F\x98\x8E" dann schon, wird entsprechend nicht dargestellt aber immer hin gespeichert ....

                    Da stellt sich für mich die Frage ob das letztenendes eine Auswirkung auf die Performance oder dem Speicherverbrauch hat ob der Smiley auf die ein oder andere Weise gespeichert wird?
                    Sonst wäre ich bei meiner Eingangs Frage, wie ich den blöden Code bekomme damit ich eben diesen speichern kann und nicht als "dargestellter smiley".

                    Kommentar


                    • #11
                      Kommt jetzt noch SQL-Code von dir? Wenn du Probleme mit der Bedienung von phpMyAdmin hast, wende dich am besten an dessen Hersteller. Das hier ist kein Support-Forum für phpMyAdmin. Oder verzichte einfach auf phpMyAdmin und nimm einen anderen Client.

                      Kommentar


                      • #12
                        Zitat von Paykoman Beitrag anzeigen
                        Ist evtl. MyISAM das Problem?
                        Wenn du nicht weisst was der Unterschied zwischen MyISAM und innoDB ist, dann lies es nach, gibt ja nur zig Seiten die das neben dem Handbuch zum Thema haben..
                        MyISAM gilt darüber hinaus als veraltet.

                        Warum zeigst du denn keinen SQL-DUMP und Code, stattdessen müssen wir hier herum rätseln und du führst nur Vermutungen auf anstatt mal zu lernen und dich mit der Thematik, die du ja anwenden willst, mal auseinanderzusetzen.
                        Der rückwärtige Schrägstrich gilt im übrigen als Maskierungs-Zeichen. Du musst zudem Daten vorab immer mit mysqli_real_escape_string maskieren oder du verwendest prepared statements.

                        Das alles in utf8 durchgängig verwendet werden muss ist auch klar Linktipp dazu
                        https://mathiasbynens.be/notes/mysql-utf8mb4

                        Kommentar


                        • #13
                          Zu #5 und dem Link von protestix

                          Zitat von Link oben
                          Summary Never use utf8 in MySQL — always use utf8mb4 instead
                          bzw:

                          https://stackoverflow.com/a/32185693/10537201

                          ​​​​​​Das wäre dann auch insofern geschickt wenn wir den PDO Artikel in der Wissenssammlung dahingehend aktualisieren? Oder zumindest erwähnen?
                          The string "()()" is not palindrom but the String "())(" is.

                          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                          PHP.de Wissenssammlung | Kein Support per PN

                          Kommentar


                          • #14
                            Moin,

                            neuer Tag neuer versuch.
                            Naja wie ich schon 2 mal sagte entspricht mein Versuchsaufbau exakt dem was Hellbringer oben bereits gepostet hat, aber dann werde ich mal copy & paste machen damit ihr glücklich seid =)

                            Wie ihr immer so schön Vorwürfe dem faulen unwissenden macht, auf die Ansprache bzw. Frage bzgl. des Smileys hat keiner reagiert...

                            Den Smiley den hellbringer verwendet, kann ich auch ohne Probleme speichern aber nicht den oben verlinkten Smiley der ebenfalls (wie viele andere) zu den nativen gehört.

                            PHP-Code:
                            $stmt $db->prepare('INSERT INTO test (foo) VALUES (?)');
                            $stmt->execute(["Hallo ☺"]); // funktioniert 
                            Ahh sehe gerade das Forum hat mit diesem Smiley auch so seine Probleme und bricht den Beitrag ab dort ab....
                            Also irgend was ist komisch an den blöden nativen Smileys

                            Kommentar


                            • #15
                              Tipp: Verwende zum Testen die hexadezimale Darstellung für deine Smileys. Und hellbringer Skript solltest du erweitern wenn du keine temporäre Tabelle nehmen möchtest.
                              Hab das mal gemacht da ich selbst utf8mb4 noch nicht gebraucht habe:
                              PHP-Code:
                              $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4''??''??', [
                                  
                              PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
                              ]);
                              $db->query('
                                  DROP TABLE IF EXISTS test
                              '
                              );
                              $db->query('
                                  CREATE TABLE IF NOT EXISTS test (
                                      id INT NOT NULL AUTO_INCREMENT,
                                      foo VARCHAR(255) NOT NULL,
                                      PRIMARY KEY (id)
                                  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
                              '
                              );
                              $emoji "\xf0\x9f\x98\x8e";
                              $stmt $db->prepare("INSERT INTO test (foo) VALUES (:foo)");
                              $stmt->execute(["foo" => $emoji]);

                              $result $db->query('SELECT foo FROM test');
                              $row $result->fetch(PDO::FETCH_OBJ);
                              var_dump($row->foo$row->foo === $emoji); 
                              Ausgabe
                              string(4) "?" bool(true)

                              Das der Beitrag ab einen echten utf8mb4-Zeichen hier im Forum abgebrochen wird kann ich bestätigen. Habe das ? manuell reigesetzt um weiter schreiben zu können.
                              Dies hat aber nichts mit dein Problem zu tun.

                              Kommentar

                              Lädt...
                              X