Twitter

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 ;-)

8 Comments to Gérer les acronymes avec preg_replace_callback et create_function

  1. 24 janvier 2005 at 1 h 57 min | Permalink

    Pourquoi tu utilises pas un fichier texte plutôt ??
    Ca serait certainement plus rapide niveau temps d’execution.

  2. 24 janvier 2005 at 1 h 58 min | Permalink

    Woups, le lien vers la liste marche pô

  3. 24 janvier 2005 at 2 h 04 min | Permalink

    ::whistle

    Merci, une erreur d’url. Sinon pourquoi une base de donnée? C’est plus simple à gérer :D

  4. 24 janvier 2005 at 7 h 52 min | Permalink

    Ouais, sympa, mais moi, j’aurais tout mis dans tableau, c’est plus rapide (quand le script de rendu est long (ce qui est mon cas :) )

    test : CSS et xHTML, la solution ?

  5. 25 janvier 2005 at 22 h 19 min | Permalink

    Je suis pas d’accord avec ASM… chez moi, c’est assembleur :D

  6. 26 janvier 2005 at 13 h 29 min | Permalink

    Antoine> Dans ce cas là la fonctionnalité supplémentaire te sera utile ^^, car moi je garde mon ASM ;-)

  7. 6 mars 2005 at 8 h 07 min | Permalink

    C’est sympa comme fonction.

    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).

  8. 6 mars 2005 at 12 h 16 min | Permalink

    Bonjour Daniel,

    j’ai utilisé create_function car makeAcronym() fait partie de ma classe de gestion de blog. Je voulais tout encapsuler et éviter d’utiliser une fonction externe. Je n’ai en effet pas trouvé comment appeler une fonction membre en callback :o

Saisir un commentaire

Vous pouvez utilisez les balises HTML suivantes, ainsi que les attributs associés : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Photographie

Tranches de vie on Facebook