Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP : Sonderzeichen in DB speichern.

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

  • PHP : Sonderzeichen in DB speichern.

    hallo,
    ich arbeite gerade an einem Chat-System und da soll es natürlich auch Emojis geben.
    Also ich habe ein Input mit Sonderzeichen also den Emojis.Diesen speichere ich dann per PDO in die DB mit
    PHP-Code:
       function message ($message,$username,$DB)
       {
         
    $sth $DB->prepare("INSERT INTO chat (username,message) VALUES ('$username','$message')");
         
    $sth->execute();
       }
       if(isset(
    $_POST['submitmessage']))
       {
         
    $_SESSION['timebefore'] = $_SESSION['time'];
         
    $_SESSION['time'] = time();
         if(
    $_SESSION['time']-$_SESSION['timebefore']<5)
         {
           echo 
    "Please slowdown";
         }
         
    $username $userRow[0][1];
         
    $message $_POST['message'];
         
    $message htmlentities($message);
         if(
    $message== "help")
         {
           echo 
    "help";
         }
         if (empty(
    $message)) {
        
    "No message";
    }
    else
         {
       
    message($message,$username,$DB);
        }
       } 
    Mir bewusst , dass der Code eine Injection Vulnerabilität hat(werde ich noch beheben).
    Meine PDO Verbindung und meine Html-Datei sind beide mit UTF-8.
    Ich hatte schon es schon mit htmlspecialchars und htmlentities versucht.Momentan sehe ich in meiner DB nur ???? statt dem gewünschtem #128518


  • #2
    Für Emojis reicht bei MySQL utf8 nicht aus, du brauchst dafür utf8mb4:

    https://dev.mysql.com/doc/refman/5.5...e-utf8mb4.html

    Und htmlentities() ist Quatsch. Das solltest du am besten vergessen.

    Und ohne Behandlung des Kontextwechsels (also escape_string oder Prepared Statements) ist der Code so jedenfalls fehlerhaft.

    Kommentar


    • #3
      Und eine Funktion sollte immer etwas zurückgeben. Deine gibt gar nichts zurück, weder ein Bool, eine Anzahl oder was auch immer.
      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
        Zitat von hellbringer Beitrag anzeigen
        Für Emojis reicht bei MySQL utf8 nicht aus, du brauchst dafür utf8mb4:

        https://dev.mysql.com/doc/refman/5.5...e-utf8mb4.html

        Und htmlentities() ist Quatsch. Das solltest du am besten vergessen.

        Und ohne Behandlung des Kontextwechsels (also escape_string oder Prepared Statements) ist der Code so jedenfalls fehlerhaft.
        Okay , habe mir mal den Link angesehen, wie genau kann ich sowas implementieren?

        Kommentar


        • #6
          Zitat von register123 Beitrag anzeigen
          Okay , habe mir mal den Link angesehen, wie genau kann ich sowas implementieren?
          Naja, du ersetzt "utf8" mit "utf8mb4".

          Kommentar


          • #7
            Zitat von hellbringer Beitrag anzeigen

            Naja, du ersetzt "utf8" mit "utf8mb4".
            Okay habe ich jetzt bei meinem PDO gemacht , muss ich auch noch etwas bei MySQL machen? (Bekomme als Output jetzt ? davor war es ???? )

            Kommentar


            • #8
              Charset der Datenbanktabelle auf utf8mb4 gesetzt?

              Kommentar


              • #9
                Zitat von hellbringer Beitrag anzeigen
                Charset der Datenbanktabelle auf utf8mb4 gesetzt?
                Okay ging mit :
                ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Es funktioniert!!! Ich danke dir sehr.

                Kommentar

                Lädt...
                X