- Fil d'ariane : Accueil du devBlog
- / Détail du billet (Lien direct)
Gérer les acronymes avec preg_replace_callback et create_function
Voici un petit script sans prétention vous permettant d'afficher les acronymes que vous aurez stocké en base de donnée. En mode édition il vous faudra appliquer un BBcode sur l'expression à gérer. Une fonction se chargera de transformer le tout en code HTML valide.
La petite table qui va bien
C'est vraiment une petite table, elle ne contient qu'un champ pour stocker l'acronyme (en Primary Key) et son interprétation complète.
DROP TABLE IF EXISTS `blog_acronym`; CREATE TABLE `blog_acronym` ( `acronym` varchar(20) NOT NULL default '', `libelle` varchar(255) NOT NULL default '', KEY `acronym` (`acronym`) ) TYPE=MyISAM;
La fonction qui va bien
Voici une méthode extraite de la classe MiniBlog qui sert à gérer ce même blog.
// + ----------------------------------------------------------------------------------
// + makeAcronym
// + Entrée : le texte à traiter
// + Sortie : le texte traité
function makeAcronym ($texte) {
$texte = preg_replace_callback("#\[acronym\](.+?)\[\/acronym\]#si",
create_function('$matches', '
$rq = "SELECT * FROM `blog_acronym` WHERE `acronym` = \'" . $matches[1] . "\'";
$acronym = mysql_fetch_object(mysql_query($rq));
return ($acronym->acronym) ? "<acronym title=\"" . $acronym->libelle . "\">" . $matches[1] . "</acronym>" : $matches[1];
')
, $texte);
return $texte;
}
Usage
Accédez à la notice d'utilisation ici
Pour ceux qui voudrait la table avec quelques entrées voici la Liste des acronymes utilisés sur ce Blog
Commentaires
[#2] Commentaire rédigé le Lundi 24 Janvier 2005 à 01:58 par Olivier
[#4] Commentaire rédigé le Lundi 24 Janvier 2005 à 07:52 par Antoine
test : CSS et xHTML, la solution ?
[#5] Commentaire rédigé le Mardi 25 Janvier 2005 à 22:19 par Antoine
[#7] Commentaire rédigé le Dimanche 06 Mars 2005 à 08:07 par Daniel
J'aurai par contre rajouté la gestion d'erreur à la fonction de callback et du coup défini celle-ci en dehors de l'appel à preg_replace_callback() (peut-être pas pour l'exemple, mais en tout cas dans un script en production).
L'ajout de commentaire a été désactivé pour ce billet.
Trackbacks
Pisteurs vers ce billet (trackbacks entrant)
Il n'y a pas encore de pisteurs pour ce billet.
Pistés par ce billet (trackbacks sortant)
Il n'y a pas encore de pisteurs effectué par ce billet.


Ca serait certainement plus rapide niveau temps d'execution.