Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

Les smileys... gestion et mise en pratique !

Les smileys... gestion et mise en pratique !
Emoticon diront certains puristes.

Oui, sans doute, mais le sujet n'est pas là !
Depuis le temps où je traine mes guêttres sur les forums, ces petites icônes n'ont eu de cesse que de m'ennuyer.

Par contre, elles font un tabac sur des dizaines de forums et tous les phpistes en herbe en veulent encore et toujours.

Bon, c'est à la mode, on va donc en parler.

On en revient à notre sujet initial et à la gestion de ces petites bestioles qui pullulent ! Bien trop souvent, à la demande de multiples posteurs qui ne s'en sortaient pas, il m'a été donné de voir leurs codes démentiels, à grands coups de preg_replace par ici, preg_replace par là, le tout dans des boucles à donner le vertige à un pilote de chasse, quand ce n'était au départ d'une base de données gérant une trentaine d'images.

Affolant !

Et pourtant... c'est si simple à gérer !
PHP possède une fonction de remplacement qui n'utilise pas le moteur de regex et qui s'appelle : str_replace();
Cette simple fonction de remplacement dans une chaine vous permet de remplacer votre "caractère smiley" par son icone.

Remplacement des codes par les smileys
Exemple simple :

<?php
$texte='Un texte avec mon smileys souriant :-) et voilà';

//Pour remplacer, il suffit de faire :

echo str_replace(':-)','<img src="smileys/souriant.png">',$texte);
?>


pour obtenir à l'affichage :
Un texte avec mon smiley souriant

Impec, non ?
Quoi, j'en entend qui hurle au scandale en disant que ça ne change rien par rapport au preg_replace();

Et bien si, str_replace(); change toute la donne surtout que le moteur de regex, mangeur de ressources par excellence, n'est pas sollicité.

Bof, ouais, p'têt... on s'en tape, on doit quand même se taper 50 str_replace(); pour gérer les 50 smileys !


Qui a dit ça dans le fond là ?

Bon on redevient sérieux là !
Ce que vous ne savez peut-être pas, c'est que str_replace(); offre une option vachement intéressante qui est le passage de tableaux en paramètre.

Remplacement multiple des codes par les smileys
Exemple avec tableau :

<?php
$texte='On reprend notre texte avec le smiley souriant :-) et on lui ajoute le smiley mort de rire :-p suivi du smiley clin d\'oeil ;-)';

//Pour remplacer, il suffit de faire :

echo str_replace(array(':-)',':-p',';-)'),array('<img src="sourire.png" alt=":)" />','<img src="mort_de_rire.png" alt=";-p" />','<img src="clin_d-oeil.png" alt=";-)" />'),$texte);
?>


pour obtenir à l'affichage :
On reprend notre texte avec le smiley souriant et on lui ajoute le smiley mort de rire suivi du smiley clin d'oeil

Alors, hein ?
Bon ok, ça marche mais c'est pas beau, c'est même illisible sous cette forme.

Qu'à cela ne tienne, on va améliorer le principe et coder les array(); en dehors du str_replace();

Et dans la foulée, on va en faire une fonction qui pourra être utilisée et appellée où l'on veut.

Tout en un - La fonction
<?php
function smileys($texte)
{
$in=array(
           ":-((" , // en colère
           ":-(" , // déçu
           ":-)", //sourire
           ":-D", // mort de rire
           ":-p", // passe la langue
           );

$out=array(
           '<img src="en_colere.png" alt="" />',
           '<img src="pas_content.png" alt="" />',
           '<img src="clin_d-oeil.png" alt="" />',
           '<img src="mort_de_rire.png" alt="" />',
           '<img src="tire_la_langue.png" alt="" />',
           );

           return str_replace($in,$out,$texte);
}

echo smileys($texte);
?>

Et voilà, terminé !
Une fonction de gestion de smileys qui n'utilise pas la moindre regex.
Simple, efficace et nettement moins lourde pour votre serveur.

A vous maintenant d'y mettre votre série de codes et de smileys

ATTENTION !
Il est important dans ce système de mettre en première position, dans le tableau $in, les symboles les plus longs et vous comprendrez pourquoi en faisant ce simple test :

Le test :

<?php
$in=array(
     '-(;',
     '-(('
     );
$out=array(
     '<img src="pas_content.png" alt="" />',
     '<img src="en_colere.png" alt="" />'
     );
echo str_replace($in,$out,$texte);
?>


Afin d'éviter des problèmes sur certaines syntaxes d'écriture, il est peut-être judicieux de prévoir l'emploi de l'espace dans les changements.
Cette manière de faire éviterait d'avoir des modifications intempestives à l'intérieur d'un texte en forçant le changement en smileys uniquement s'il est précédé d'un espace
Exemple :

<?php
$in=array(
     ' -(;',
     ' -(('
     );
$out=array(
     ' <img src="pas_content.png" alt="" />',
     ' <img src="en_colere.png" alt="" />'
     );
echo str_replace($in,$out,$texte);
?>


Bref, il y a moyen d'apporter des petites modifs qui permettront de trouver le meilleur rendement aux remplacements.
ADAM Benjamin 2008 | Admin