Émojis remplacés par points d'interrogation

Fermé
Signaler
Messages postés
388
Date d'inscription
dimanche 8 février 2015
Statut
Membre
Dernière intervention
10 avril 2021
-
Messages postés
34249
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
-
Bonsoir,
j'ai un souci sur mon site, tous les émojis se voient remplacés par des points d'interrogation "?"
J'ai fais pas mal de recherche, la solution trouvée est de passer la table en utf8mb4.
Ma BDD est en utf8mb4-unicode_ci.
Mon code de connexion à ma BDD est le suivant:

try {$bdd = new PDO('mysql:host=localhost;dbname=apfr;charset=utf8mb4', '', '',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET character_set_results = 'utf8mb4', character_set_client = 'utf8mb4', character_set_connection = 'utf8mb4', character_set_database = 'utf8mb4', character_set_server = 'utf8mb4'"));}
catch(Exception $e) {die('Error !');}

malgré tout ça le problème perciste.
Auriez-vous une idée pour que je puisse me débarrasser du pb une bonne fois pour toutes ?
Merci d'avance.

1 réponse

Messages postés
34249
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
3 865
Bonjour,
Tu peux spécifier le charset directement dans la chaine de connexion (le dsn)
$dsn = 'mysql:host=localhost;dbname=apfr;port=3306;charset=utf8mb4';

L'autre solution, un peu comme la tienne mais avec le collate en plus dans le MYSQL_ATTR_INIT_COMMAND

$bdd =new PDO(
    'mysql:host=localhost;dbname=apfr;port=3306;charset=utf8mb4',
    'your-username',
    'your-password',
    array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_PERSISTENT => false,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
    )
);

n'oublie pas non plus de vérifier l'encodage déclaré dans tes fichiers ainsi que celui de tes fichiers.
Je t'invite à lire ceci : https://www.commentcamarche.net/faq/47069-html-php-caracteres-accentues-et-l-utf8