Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP : Sonderzeichen in DB speichern.

Einklappen

Neue Werbung 2019

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.
      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
        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


        • #5
          zB: https://php-de.github.io/jumpto/pdo/...red-statements
          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


          • #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