Responsive Ad Area

Partager cet article

Actu / Site web / Techniques de geek

Créer son système BBCode (partie 2 : côté serveur)

Créer son système bbcode

Note informative : cet article est la suite de l’article Créer son système BBCode (côté client) que je vous invite à lire si vous ne l’avez pas encore fait.
Ici nous allons voir comment gérer les balises BBCode en PHP : interprétation des balises et transformation en code HTML.

L’architecture de base de notre classe

class BBCode
{
	protected static $bbcodeBalises;
	protected static $htmlBalises;

	public static function bbcodeToHtml($content) {}

	public static function htmlToBbcode($content) {}

	protected static function initializeBbcodeToHtml() {}

	protected static function initializeHtmlToBbcode() {}
}

Les attributs et les méthodes de notre classe PHP seront tous en statique.

Nous aurons besoin de deux attributs :
bbcodeBalises : tableau comportant la liste de toutes nos balises BBCode
htmlBalises : tableau comportant la liste de toutes les balises HTML correspondantes à nos balises BBCode

Et nous ferons appel à quatre méthodes :
bbcodeToHtml() : méthode permettant de convertir un contenu comportant des balises BBCode en code HTML
htmlToBbcode() : méthode permettant de convertir un contenu comportant du code HTML en balises BBCode
initializeBbcodeToHtml() : méthode d’initialisation des valeurs pattern et de replacement pour la conversion du BBCode en HTML
initializeHtmlToBbcode() : méthode d’initialisation des valeurs pattern et de replacement pour la conversion du HTML en BBCode

Initialisation des valeurs patterns et replacement

Au sein des méthodes initializeBbcodeToHtml() et initializeHtmlToBbcode(), nous allons initialiser les attributs $bbcodeBalises et $htmlBalises de notre classe avec les balises BBCode et leurs balises HTML correspondantes.

protected static function initializeBbcodeToHtml()
{
	self::$bbcodeBalises = array('#\[sous_titre](.+)\[/sous_titre]#isU',
								 '#\[p](.+)\[/p]#isU',
								 '#\[br]#isU',
								 '#\[i](.+)\[/i]#isU',
								 '#\[b](.+)\[/b]#isU',
								 '#\[liste]#isU',
								 '#\[/liste]#isU',
								 '#\[liste_element]#isU',
								 '#\[/liste_element]#isU');

	self::$htmlBalises = array('<h2>$1</h2>',
							   '<p>$1</p>',
							   '<br />',
							   '<em>$1</em>',
							   '<strong>$1</strong>',
							   '<ul>',
							   '</ul>',
							   '<li>',		
							   '</li>');		
}
protected static function initializeHtmlToBbcode()
{
	self::$htmlBalises = array('#\<h2>(.+)\</h2>#isU',
							   '#\<p>(.+)\</p>#isU',
							   '#\<em>(.+)\</em>#isU',
							   '#\<strong>(.+)\</strong>#isU',
							   '#\<ul>(.+)\</ul>#isU',
							   '#\<li>(.+)\</li>#isU');

	self::$bbcodeBalises = array('[sous_titre]$1[/sous_titre]',
								 '[p]$1[/p]',
								 '[i]$1[/i]',
								 '[b]$1[/b]',
								 '[ul]$1[/ul]',
								 '[li]$1[/li]');	
}

Dans chacune des deux méthodes, le premier attribut initialisé est une expression régulière et comprend les balises pattern qui seront à remplacer. Quant au second attribut, il est initialisé avec les balises qui remplacent les balises pattern.

Si vous ne connaissez pas le fonctionnement des expressions régulières, je vous invite à consulter le tutoriel du site OpenClassrooms : Les expressions régulières

Méthodes de conversion

Pour convertir nos balises BBCodes en HTML (et inversement), nous allons utiliser les méthodes bbcodeToHtml() et htmlToBbcode().

public static function bbcodeToHtml($content)
{
	$content = stripslashes(htmlspecialchars(nl2br($content)));
	BBCode::initializeBbcodeToHtml();
	for ($i = 0 ; $i < count(self::$bbcodeBalises) ; $i++) {
		$content = preg_replace(self::$bbcodeBalises[$i], self::$htmlBalises[$i], $content);
	}
	return $content;
}

bbcodeToHtml() prend en paramètre le contenu textuel qui fera l’objet de la conversion des balises BBCode et balises HTML.

Après avoir sécurisé notre variable $content et initialisé les valeurs pattern et de replacement, nous allons utiliser une boucle For pour parcourir et scanner notre contenu textuel afin de rechercher toutes les balises BBCode présentes.

Chacune des balises BBCode trouvée sera alors automatiquement convertie avec sa version HTML correspondante à l’aide de la fonction preg_replace().

public static function htmlToBbcode($content)
{
	$content = stripslashes(htmlspecialchars(nl2br($content)));
	BBCode::initializeHtmlToBbcode();
	for ($i = 0 ; $i < count(self::$htmlBalises) ; $i++) {
		$content = preg_replace(self::$htmlBalises[$i], self::$bbcodeBalises[$i], $content);
	}
	return nl2br($content);
}

La méthode htmlToBbcode() a le rôle inverse de bbcodeToHtml() et a pour but de convertir les balises HTML en balises BBCodes.
La structure et le fonctionnement du code est identique, seules les valeurs de pattern et de replacement changent.

Télécharger le code source

Le code des méthodes bbcodeToHtml () et htmlToBbcode() étant assez similaire, on aurait aussi très bien pu écrire une méthode unique en ajoutant un second paramètre comme $typeConversion, utiliser une structure conditionnelle qui indiquerait quel type de conversion la méthode doit effectuer et initialiser les attributs en conséquence.
Personnellement je préfère avoir deux méthodes aux noms distincts, quitte à monopoliser quelques octets de plus dans mon fichier PHP 🙂 Mais libre vous de modifier et d’adapter le code source à votre guise 😉

N’hésitez pas à poster un commentaire et/ou partager cet article s’il vous a aidé ou si vous pensez qu’il pourra aider des personnes de votre entourage.

Pour télécharger le code source complet : Code source (partie 2)

Vous cherchez un développeur web pour concevoir vos fonctionnalités ou projets de sites/applications web ? N’hésitez pas à me contacter ! 🙂

Partager cet article

Graphiste & développeur web indépendant, je suis le fondateur de l'agence Tomiris Web. Passionné par les technologies du web et l’art graphique, la créativité est mon moteur. D’un naturel calme et posé, j’aime explorer et m’inspirer de différents univers et suis en quête permanente de nouvelles opportunités et découvertes. Membre de l'équipe rédactionnelle du "Web et la Tortue", je partage mon expérience et mon expertise dans le domaine du web et du graphisme.

Site web : https://www.tomirisweb.fr/

Laisser un commentaire

Votre adresse mail ne sera pas publiée.Les champs obligatoires sont marqués d'un *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

39 − = 38

libero. Lorem facilisis Donec Praesent lectus