<?php
//parser du BBCode en PHP en prenant en compte les balises imbriquées
function bbcode($texte){
//"\1" nous permet de faire une correspondance de la première capture, soit "\w+" pour que ce soit la même balise récupérée et pas n'importe laquelle
//".*" nous permet de prendre tout ce qui se trouve entre les tags (balises) concernés, et de s'arrêter au premier trouvé grâce à "?" qui suit la directive : ".*?"
//"?:" nous permet de pas capturer ce qu'il-y-a entre parenthèses "(?: ceci ne sera pas capturé)"
//"[^\]]+" capture tout sauf "]" (crochet fermant) pour éviter de passer le crochet fermant du tag actuellement parsé. Tout ceci entre parenthèse pour le retrouver dans le deuxième groupe : $match[2]. Suivi d'un ? car il peut le paramètre de la balise BBCode peut être optionnel.
$pattern = '#\[(\w+)(?:=([^\]]+))?\](.*?)\[/\1\]#s';
//on parse chaque balise que preg_match() pourrait trouver, permet de gérer les imbrications
while(preg_match($pattern, $texte, $match)){
$tag = $match[1];
$parametres = $match[2];
$content = $match[3];
//on fait un remplacement de la balise par la balise HTML correspondante
switch($tag){
case 'u':
$remplacement = "<u>$content</u>";
break;
case 'b':
$remplacement = "<b>$content</b>";
break;
case 'i':
$remplacement = "<i>$content</i>";
break;
case 'color':
//Gestion d'un paramètre
//vérifie l'exactitude du paramètre envoyé, si il correspond à nos attentes
//ici dans cet exemple, on peut envoyer des noms de couleur (blue, red, green,...) ou des codes couleurs
if(!preg_match("#(?:\#[0-9a-f]{3,8}|[a-z]{3,15})#s", $parametres)){
$remplacement = $content;
break;
}
$remplacement = "<span style=\"color:$parametres\">$content</span>";
break;
case 'quote':
$remplacement = "<blockquote>$content</blockquote>";
break;
//au cas où la balise mentionnée n'existe pas, on rend le texte sans les balises afin de ne pas faire une boucle PHP infinie et chercher à le remplacer indéfiniement
default:
$remplacement = $content;
}
// Remplacer la balise dans le texte
$texte = str_replace($match[0], $remplacement, $texte);
}
//enfin, on retourne le texte, parsé.
return $texte;
}
?>
<?php
$texte = "Du texte BBCode emboîté ; [b]du gras, [i]de l'italique [u]et du souligné[/u][/i][/b]
[quote]quote 1[quote]quote [color=red]2[/color][/quote][/quote]";
$texte = bbcode($texte);
echo $texte;
?>
J'espère que ce script gratuit vous sera utile dans vos projets.Si vous souhaitez soutenir mon travail, un simple clic sur le bouton "Donner remercier" ci-dessous ou une note serait grandement apprécié. Merci pour votre générosité !
Vous cherchez à pousser encore plus loin vos idées ou à les concrétiser avec un site internet sur mesure ? Je suis là pour vous aider ! Mon expérience en développement web est à votre disposition.
Que ce soit la création de votre site web pro ou l'apport de fonctionnalités avancées à votre projet, contactez-moi pour en discuter et avoir un devis gratuit personnalisé.
Mon objectif est de vous offrir des solutions sur mesure qui répondent à vos besoins, et votre vision associée à mon expertise donnera vie à votre projet web parfait. Contactez-moi aujourd'hui, je réponds en général en moins d'une heure :
Demander un devis