PHP Emoji werden nicht in MySQL Datenbank eingetragen

Pfandfinder

Lieutenant
Registriert
Nov. 2020
Beiträge
619
ich möchte einen Text von einem input Feld in meine Datenbank eintragen. Das klappt auch, aber sobald der User jetzt Emojis mit einfügt, sind diese als Fragezeichen in der DB (Anhang, Zeile 2). Wenn ich über phpMyAdmin Emojis eintrage, stehen diese richtig drin (Anhang, Zeile 1). Es liegt also irgendwie am PHP Script, denn die Tabellen sind auch utf8mb4_unicode_ci, so wie es sein soll.

Das sieht quasi so aus:

PHP:
$statement = $pdo->prepare('INSERT INTO TABLE (eingabe) VALUES (:eingabe)');
$result = $statement->execute(array('eingabe' => $_POST['eingabe']));

ich habe auch schon mit utf8_decode und encode probiert, aber er trägt es nie richtig ein.

Wo ist der Fehler ?
 

Anhänge

  • 20201124-130600.png
    20201124-130600.png
    2,1 KB · Aufrufe: 255
Hast du mal geschaut, ob das Emoji überhaupt ordentlich in deinem PHP Skript ankommt?

Also einfach ein echo $_POST['eingabe'] machen (oder evtl. über var_dump) und schauen, ob das überhaupt noch passt.
 
Hi,

und dann vielleicht mal einen json_encode für Schreiben und json_decode für Lesen testen.

VG,
Mad
 
Du kannst bei der MySQL auch spalten auf n Charset einstellen. Schau mal ob du das nicht verkackt hast ;)

Falls nicht, musst du nochmal die ganze Kette durchgehen:
  • In welchem Format sendet der Browser?
  • In welchem Format arbeitet dein Script? (nicht dass hier etwas automatisch konvertiert wird)
  • In welchem Format redest du mit der Datenbank?
  • In welchem Format ist das Schema (hier: Spalte)?
 
json_encode macht es noch schlimmer:

"hi \ud83d\ude18\ud83c\udde9\ud83c\uddea338"


Die Ausgabe hier im echo ist korrekt:

PHP:
$message = 'hi 😘🇩🇪338';

$statement = $pdo->prepare('INSERT INTO TABLE (eingabe) VALUES (:eingabe)');
$result = $statement->execute(array('eingabe' => $message));

echo $message;
 
Pfandfinder schrieb:
Die Ausgabe hier im echo ist korrekt:

PHP:
$message = 'hi 😘🇩🇪338';

$statement = $pdo->prepare('INSERT INTO TABLE (eingabe) VALUES (:eingabe)');
$result = $statement->execute(array('eingabe' => $message));

echo $message;
Und das Insert direkt aus PHP (ohne den String aus dem Browser Request zu benutzen) geht auch?
 
nein, also $message direkt im script zu definieren wie im script oben, ist das selbe Ergebnis mit den Fragezeichen in der DB. das script oben habe ich so ausgeführt. aber das echo ist halt die richtige Ausgabe mit Emojis.
 
Setzt du auch das Encoding der Verbindung? SET NAMES utf8mb4
 
ah ok, also mit dem en- und decode geht es.

@Yuuri Achso, da stand noch utf8. Aber selbst wenn ich es zu utf8mb4 ändere geht es noch nicht :/
 
Im Anhang mal ein Beispiel - siehe README. Docker ist Voraussetzung.
 

Anhänge

  • poc.7z
    7,4 KB · Aufrufe: 275
Zurück
Oben