Supprimer les smileys/symboles utf8

hikaru59
Invité n'ayant pas de compte PHPfrance

23 mai 2021, 10:00

Bonjour,
J'aimerais savoir s'il y a un moyen de supprimer les smileys ou symboles utf8 (✔️❤️ par exemple) durant l'envoi d'un message.
Je n'ai jamais trouvé.

J'ai pensé au Regex, mais ça ne marche pas :

Code : Tout sélectionner

$message = 'Certains signes !?.,:;°%&$€£§²=+-/\*#<>(){}[]~❤️✔️ sont supprimés ou remplacés, pas les accents àçéè ! '; $regex = '`[^0-9a-z\s\néèàç!*?.,:;°%&$€£§²/#<>(){}~+-]`i'; // ^ pour dire de ne pas chercher de caractères 0-9, a-z, espace, saut de ligne et les signes éèàç!*?.,:;°%&$€£§²/#<>(){}~+- $message = preg_replace($regex, '', $message); // On remplace les caractères interdits par rien pour les supprimer. J'obtiens : Certains signes *!?.,:;°%&$€£§²+-/#<>(){}~�� sont supprimés ou remplacés, pas les accents àçéè !
J'obtiens des caractères bizarres ��

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 mai 2021, 12:21

Salutations !

Je n'ai pas testé, mais à priori l'option "u" (minuscule) dans la regex te permettrait de gérer les chaines utf8 et obtenir le résultat souhaité :)

https://www.php.net/manual/fr/reference ... ifiers.php
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

hikaru59
Invité n'ayant pas de compte PHPfrance

23 mai 2021, 13:04

Merci,
Cela marche.

J'ai aussi trouvé un moyen de supprimer directement ces smileys au lieu de faire la liste des signes autorisés :

Code : Tout sélectionner

$text = 'Certains signes *!?.,:;°%&$€£§²=+-/\#<>(){}[]~_| ✔️❤️ sont supprimés ou remplacés, pas les accents àçéèÀ ! '; $regex = '`[\x{2700}-\x{27BF}]`u'; $clean_text = preg_replace($regex, '', $text); echo $clean_text;
Mais je n'arrive pas à comprendre ceci: \x{ }

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 mai 2021, 18:01

Pour désigner un caractère spécifique en unicode on utilise habituellement la syntaxe \uFFFF où FFFF correspond au code hexadécimal du caractère que tu veux utiliser. Certains moteurs de regex ne reconnaissent cependant pas toujours cette syntaxe et il faut dans ce cas utiliser la forme \x{FFFF} à la place. Comme \x n'est pas une classe valide, \x{1234} n'est jamais considéré comme le caractère \x 1234 fois, mais bien comme son équivalent unicode U+1234.

Dans les regex PCRE il semble également être possible d'utiliser des catégories de caractères propres à l'unicode. Tu devrais ainsi pouvoir utiliser \p{S} pour désigner les symboles (à tester)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

hikaru59
Invité n'ayant pas de compte PHPfrance

23 mai 2021, 22:34

Merci pour ces explications. Je vois qu'il y a beaucoup de choses qui ne sont pas dans les cours.

\p{S} supprime bien tous les smileys, mais aussi certains caractères utiles : $€£°<>|