Comment programmer une fonction de type BBcode faisant grosso-modo ce que font les célèbres forums Bulletin Board, et que vous pouvez adapter selon vos besoins, voici de quoi démarrer pour vos forums.
Pour rappel, il s'agit d'interpréter un texte qui aura été passé à la moulinette de la fonction htmlspecialchars() afin de pouvoir effectuer une mise en forme de ce texte [gras, taille, couleur, liens, images, videos, smileys etc...] sans toutefois permettre à l'utilisateur de placer des tags HTML.
<?
function bbcode($text)
{
// Pour garder les espaces
$text = str_replace(' ',' ', stripslashes($text));
// Pour créer les sauts de ligne
$text = preg_replace("#n#i", '<br>', $text);
// Pour les images, on enlève http pour éviter d'y voir un lien
if (eregi('[ picture=', $text)) { $text = preg_replace("#[ picture=http://#i",'[ picture=', $text); }
// Pour les videos, on enlève http pour éviter d'y voir un lien et on transforme les liens Youtube en url menant directement à la vidéo
if (eregi('[ video=', $text)) { $text = preg_replace("#[ video=http://#i",'[ video=', $text); $text = preg_replace("#[ video=www.youtube.com/watch?v=#i",'[ video=www.youtube.com/v/', $text); }
// Pour les smilies, juste un exemple
if (eregi('[ :', $text)) { if (eregi('[ :)]',$text)) $text = preg_replace("#[ :)]#i", '<img src="/images/smilies/smile.gif">', $text); }
// Pour les adresses email en format texte
if (eregi('@', $text)) { $text = preg_replace("#([ n ])?([ a-z0-9-_.]+)@([ a-z0-9-_.]+)#i", '12(at)3', $text); }
return($text);
}
function bbcode_title($text)
{
// Pour les sauts de ligne
$text = preg_replace("#([ nr]+)#i", ' ', stripslashes($text));
// Pour les tags
if (eregi('[ ', $text)) { $text = preg_replace("#[ (.[ ^]]*)]#i", '', $text); }
// Pour les adresses email en format texte
if (eregi('@', $text)) { $text = preg_replace("#([ n ])?([ a-z0-9-_.]+)@([ a-z0-9-_.]+)#i", '12(at)3', $text); }
return $text;
}
?>
La première fonction imite les fonctionnalités principales du BBcode alors que la seconde peut vous servir par exemple pour convertir le message en un résumé sans tags pour un fil RSS.
Ce code relativement simple, utilisant tout de même quelques expressions régulières un peu complexes, vérifie la présence du nombre de tags ouvrants et fermants, mais ne réagira pas forcément parfaitement en cas d'inclusions de tags dans d'autres tags, par ailleurs le simple fait de poster ce code dans un forum qui l'utilise peut le déboussoler (cela peut etre corrigé), j'ai donc remplacé tous les "[" des tags par des "[ " ou [+espace pour éviter qu'ils soient interprétés. Vous pouvez évidemment remplacer les "[ " par "[" pour retrouver le code original.
On notera différentes ruses assez impropres mais efficaces pour pouvoir repérer les url et les transformer en liens (ici avec l'attribut rel="nofollow", que vous pouvez enlever) tout en ne les retransformant pas une seconde fois si le tag URL= est également détécté autour de l'url. Il y a bien évidemment des centaines de façons de réaliser cela.
Certaines lignes de code sont là uniquement à titre d'exemple, vous pouvez rajouter autant de smileys ou de couleurs que vous le souhaitez, je n'ai pas la prétention de fournir ici un code parfait, loin de là. Il s'agit là uniquement de vous donner une piste pour construire et adapter le votre à votre forum.
Pour la construction d'un forum en PHP, voir la discussion suivante
Voir aussi
ficgs Plus de sources
Vous devez vous enregistrer pour consulter ces sources, vous pourrez alors changer leur ordre en cliquant sur les icones les précédant.
admin Autres sources
Ce projet est collaboratif, vous pouvez remonter les sources suivantes dans la liste si vous les trouvez utiles.
generateur mise en forme text java bbcode Source ☼ PHPCS.com | PHP CodeS SourceS | 3121 sources PHP, Source, Code, PHP Scripts, Programmatio... phpcs > r/code.aspx?r=generateur+mise+en+forme+text+java+bbcode
bbCode et RegEx - ASP-PHP.net asp php > ressources/bouts de code.aspx?id=343
2000 partitions gratuites pour tous instruments... SharePoint Personalization Site Links - Les liens personnalisés des...
bbcode_create - Crée une ressource BBCode - Fonctions BBCode - BBCode - Traitement du texte - Référence des fonctions - Manuel PHP - Le PHP Facile lephpfacile > manuel php/function.bbcode create.php
Cette fonction retourne une nouvelle ressource BBCode, utilisée...
Cette fonction retourne une nouvelle ressource BBCode, utilisée... For those without the BBCode extension, here's a relatively elegant...
BBCode fonction [spoil] - PHP - Programmation - FORUM HardWare.fr forum.hardware > hfr/Programmation/PHP
verifier plusieurs champs d'un formulaire dans une meme... [PHP][resolu] appel de fonction avec nom généré...
[BBcode] Problème avec la fonction preg_replace siteduzero > forum 83 430562 p1 bbcode probleme avec la
Fonction PHP : bbcode() phpfonctions
Utilisation de @font-face pour utiliser n'importe quelle typographie... Tutorial JQuery : trier une liste en drag'n'drop avec JQueryUI...
Preg_replace dans fonction : le texte n'apparait plus... siteduzero > forum 83 414381 p1 preg replace dans
Probleme fonction affichage bbcode commentcamarche > forum/affich 11288024 probleme
je ne comprends pas ce que tu veux dire, pourrais-tu m'expliquer plus... « En passant au cloud, les entreprises doivent garder le contrôle...
Ou positionner la fonction dans un formulaire pour interpréter le BBCode? - Forum des professionnels en informatique developpez > forums/d371614/php/langage/regex/positionner
Visiblement, il suffit d'utiliser la fonction comme cela :... Et si j'ai bien compris tu veux rajouter des boutons BBCode à...
Tutoriel de PHP: BB-CODE - La boîte à prog laboiteaprog > article 62 2 php bb code
SIMPLE FONCTION TEST LIEN RAPIDSHARE rapidshare, check, cliquable, popup, bbcode, Source N°44028 PHP « Watch the Best Of the Web weelakeo > 2009/07/14/simple
// pour rotorne lien cliquable change ($msg) par... Avertissez-moi par courriel lors de la parution de nouveaux...
Liste complète des fonctions php & MySQL - Lettre B phpsources