Général
- Présentation
- Les Symboles
- Les Métacaractères
- Les Ancres et Classes
- Les options
- Constantes prédéfinies
- Equivalences
- Créer un motif
- Les POSIX
- Les PCRE
- Les Plus des PCRE
- Les Assertions Part I
- Les Assertions Part II
- Motif conditionnel
- Mysql et les regex
- Url Rewriting
- Optimisation
- Aide mémoire
Les PCRE
Les POSIX
Pratique
Linux
Spécial php
- Conseils et Astuces
- Délimiteur PCRE
- Créer une bdd
- Utiliser du BBcode
- Le binaire
- Faire un panier
- Cases à cocher
- Citations imbriquées
- Colorateur syntaxique
- Les list-box ou combo-box
- Faire un diaporama
- Isset ou empty ?
- Une légende au survol
- Site en plusieurs langues
- Requêtes dynamiques
- Gestion des smiley
- Faire un moteur de template
- Timestamp php/mysql
- Timestamp mysql
- Matcher une adresse email
- Controler des données
Les billets de fred
- Les POSIX... mise en pratique !
- Limiter l'accès à un répertoire
- Alternance de couleurs
- Magic_quotes
- Désactiver les short_tags
- Require ou include : Bench
- Cohérence dans les chaines de caractères
- "echo" : lapin ou tortue ?
- Gérer un formulaire avec plusieurs boutons
- Le formulaire a t'il été soumis ?
- J'ai décidé de grossir
- La guerre des étoiles
- La guerre des boutons
- Headers already sent
- IP, IP, IP, houra !
- Créer un itérateur avec PHP5
- On vous conduit vers la lumière
- Comment utiliser MySQL avec PHP
- Non aux booléens !
- Php.ini : dist /recommended
- Include : gouffre ou fêlure ?
- Simple comme les sessions !
- Simplifier le traitement des erreurs
- Structurez vos applications
- Franchement, t'es trop for !
- Notice: Undefined variable (ou index)
- Proscrire les variables auto déclarées
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.
