Sélectionner une page

Il est de plus en plus en vogue et apprécié des visiteurs de pouvoir insérer des émoticônes et emoji. Cela est particulièrement vrai pour les commentaires et évaluations. Comme la plupart des navigateurs gèrent bien l’affichage, il n’y a pas de raison de se priver. Les mettre en place sous Laravel est assez simple et il n’y a pas beaucoup de modifications à faire.

J’ai remarqué l’intérêt des visiteurs en constatant l’erreur suivante dans les logs.

SQLSTATE[HY000]: General error: 1366 Incorrect string value: ‘\xF0\x9F\x98\x8B’ for column ‘review’ at row 1

Après quelques recherches, j’ai constaté que ces caractères spéciaux sont des emoji inséré directement depuis un téléphone portable.

Autoriser l’ajout d’emoji

Pour permettre l’ajout, il faut modifier les champs de la base de données qui contiendront les textes ainsi que le fichier de configurations. Les champs de la base doivent avoir comme collation: utf8mb4_unicode_ci et vous devez modifier le fichier de config de la façon suivante:

//Modifier le fichier : config/database.php
'mysql' => [
'charset' => 'utf8mb4',[
'collation' => 'utf8mb4_unicode_ci',[
],

Refuser et supprimer les émoticones

Si vous désirez les supprimer, la fonction suivante permet d’enlever tous les caractères correspondant et permet d’enregistrer sans erreur.

/**
* find on https://gist.github.com/quantizer/5744907
*/
    public function removeEmoji($text) {

        $clean_text = "";

        // Match Emoticons
        $regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u';
        $clean_text = preg_replace($regexEmoticons, '', $text);

        // Match Miscellaneous Symbols and Pictographs
        $regexSymbols = '/[\x{1F300}-\x{1F5FF}]/u';
        $clean_text = preg_replace($regexSymbols, '', $clean_text);

        // Match Transport And Map Symbols
        $regexTransport = '/[\x{1F680}-\x{1F6FF}]/u';
        $clean_text = preg_replace($regexTransport, '', $clean_text);

        // Match Miscellaneous Symbols
        $regexMisc = '/[\x{2600}-\x{26FF}]/u';
        $clean_text = preg_replace($regexMisc, '', $clean_text);

        // Match Dingbats
        $regexDingbats = '/[\x{2700}-\x{27BF}]/u';
        $clean_text = preg_replace($regexDingbats, '', $clean_text);

        return $clean_text;
    }