Compilateur/décompilateur de bcode

Soyez le premier à donner votre avis sur cette source.

Vue 6 555 fois - Téléchargée 269 fois


Description

Ces fonctions servent a convertir un texte avec du BCode en code HTML et inverssement.
Le BCode, pour balise code, que j'ai utilisé est très fortement inspiré du célèbre BBCode de phppBB, il permet simplement et rapidement de donner vie aux news et tutos de votre site, en utilisant un code de balise simple lors de la saisie coté administrateur

A appeller avant chaque ajout ou modification d'une news ou tuto dans la base de données, et inverssement à l'édition coté administrateur.

il ne vous reste plus qu'a créer la page d'ajout de news approprié :)

Source / Exemple :


<?

// Fonction qui transforme un texte avec du BCode en texte avec du code HTML
function compile($corps) {
	// Permet de gérer les espaces avant un caractère, en debut de texte
	// cette fonction va chercher le nombre d'espace et les remplacerer par '&nbsp; autant de fois qu'il le faut.
	$corps=preg_replace('/^( +)(\S{1})/e', "str_repeat('&nbsp;',strlen('\\1')).'\\2'", $corps);
	// De même, mais pour chaque debut de phrase en debut de phrase
	$corps=preg_replace('/\n(\ *)(\S?)/e', "'<br>'.str_repeat('&nbsp;',strlen('\\1')).'\\2'", $corps);
	// Permet de remplacer les balises de gras, par l'équivalent en HTML : [b]texte/b
	$corps=str_replace('[b]', '<b>', $corps);
	$corps=str_replace('/b', '</b>', $corps);
	// De même pour l'italique : [i]texte/i
	$corps=str_replace('[i]', '<i>', $corps);
	$corps=str_replace('/i', '</i>', $corps);
	// De même pour le soulignement : [s]texte/s
	$corps=str_replace('[s]', '<u>', $corps);
	$corps=str_replace('/s', '</u>', $corps);
	// Permet de remplacer les balises de citation par une mise en forme adéquate : [quote]texte/quote
	$corps=str_replace('[quote]', '<br><i>Citation<br>&nbsp;&nbsp;&nbsp;&nbsp;', $corps);
	$corps=str_replace('/quote', '<br>/Citation</i><br>', $corps);
	// Permet de remplacer les balises de couleur par du code HTML approprié : [color=COULEUR]texte/color
	$corps=preg_replace('/\[color=(\w+)\]/', '<font color="\\1">', $corps);
	$corps=str_replace('/color', '</font>', $corps);
	// Permet de remplacer la balise image : [img]URL image/img
	$corps=preg_replace('/\[img\](.+)\[\/img\]/', '<img src="\\1" align="center">', $corps);
	// permet de remplacer la balise URL par un lien HTML
	// 2 methodes differentes : [url]URL/url ou [url=URL]Texte[url]
	$corps=preg_replace('/\[url\](http:\/\/|)(.+)\[\/url\]/', '<a href="http://\\2" target="_blank" class="corps">\\2</a>', $corps);
	$corps=preg_replace('/\[url=(http:\/\/|)(.+)\](.+)\[\/url\]/', '<a href="http://\\2" target="_blank" class="corps">\\3</a>', $corps);
	//permet de remplacer le code d'un smilie par l'image correspondante
	$corps=str_replace(':D', '<img width="20" height="20" src="smilies/happy.gif">', $corps);
	$corps=str_replace(':)', '<img width="20" height="20" src="smilies/smile.gif">', $corps);
	$corps=str_replace(':p', '<img width="20" height="20" src="smilies/notify.gif">', $corps);
	$corps=str_replace(';)', '<img width="20" height="20" src="smilies/winkin.gif">', $corps);
	$corps=str_replace(':lol:', '<img width="20" height="20" src="smilies/lol.gif">', $corps);
	$corps=str_replace('$)', '<img width="20" height="20" src="smilies/cool.gif">', $corps);
	$corps=str_replace('8)', '<img width="20" height="20" src="smilies/blink.gif">', $corps);
	$corps=str_replace(':|', '<img width="20" height="20" src="smilies/hmm.gif">', $corps);
	$corps=str_replace(':?', '<img width="20" height="20" src="smilies/whatsthat.gif">', $corps);
	$corps=str_replace(':(', '<img width="20" height="20" src="smilies/mad.gif">', $corps);
	$corps=str_replace(':[', '<img width="20" height="20" src="smilies/bad.gif">', $corps);
	
	return $corps;
}

// Fonction qui transforme un texte avec du code HTML en texte avec du BCode a l'instar de la première fonction
function decompile($corps) {
	$corps=preg_replace('/^(&nbsp;+)(\S{1})/e', "str_repeat(' ',(strlen('\\1')/6)).'\\2'", $corps);
	$corps=preg_replace('/<br>(&nbsp;*)(\S?)/e', "str_repeat(' ',(strlen('\\1')/6)).'\\2'", $corps);
	$corps=str_replace('<br>', '', $corps);
	$corps=str_replace('<br><i>Citation<br>&nbsp;&nbsp;&nbsp;&nbsp;', '[quote]', $corps);
	$corps=str_replace('<br>/Citation</i><br>', '/quote', $corps);
	$corps=str_replace('<b>', '[b]', $corps);
	$corps=str_replace('</b>', '/b', $corps);
	$corps=str_replace('<i>', '[i]', $corps);
	$corps=str_replace('</i>', '/i', $corps);
	$corps=str_replace('<u>', '[s]', $corps);
	$corps=str_replace('</u>', '/s', $corps);
	$corps=preg_replace('/<font color="(\w+)">/', '[color=\\1]', $corps);
	$corps=str_replace('</font>', '/color', $corps);
	$corps=preg_replace('/<img src="(.+)" align="center">/', '[img]\\1/img', $corps);
	$corps=preg_replace('/<a href="http:\/\/(.+)" target="_blank" class="corps">(.+)<\/a>/', '[url=http://\\1]\\2/url', $corps);
	
	$corps=str_replace('<img width="20" height="20" src="smilies/happy.gif">', ':D', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/smile.gif">', ':)', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/notify.gif">', ':p', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/winkin.gif">', ';)', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/lol.gif">', ':lol:', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/cool.gif">', '$)', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/blink.gif">', '8)', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/hmm.gif">', ':|', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/whatsthat.gif">', ':?', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/mad.gif">', ':(', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/bad.gif">', ':[', $corps);
	
	return $corps;
}

// \w : [0-9a-zA-z] 
// . : n'impporte quels caracteres sauf \n 
// + : 1 ou plusieurs fois
// * : 0 ou plusieurs fois
// \ :echape
// \S : n'impporte quels caracteres sauf \n, \t, \r
// {1} : un et un seul

?>

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
un compilateur produit un binaire...
Messages postés
19
Date d'inscription
dimanche 9 novembre 2003
Statut
Membre
Dernière intervention
13 décembre 2004

hmm j'ai pesque fait la même chose, mais je bloquais sur les liens. Je n'ai pas encore essayé de faire fonctionner tout ça, mais ça m'a l'air assez bien. 9/10 (il parait que y'a un petit problème dans ton code) :)
Messages postés
5
Date d'inscription
samedi 24 mai 2003
Statut
Membre
Dernière intervention
5 avril 2004

Bonsoir à tous.

Pour apz je ne vois pas.

Pour spiderAlpha voila un autre bout de code qui permet la transformation et qui devrai fonctioner :
$corp = preg_replace("/\[url\](.*?)\[\/url\]/si","\\1",$corp);
$corp = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/si","\\2",$corp);

++
Messages postés
3
Date d'inscription
lundi 5 avril 2004
Statut
Membre
Dernière intervention
20 avril 2004

Salut,
je trouve ton code exellent, mais comme dit plus haut, il y a un probléme avec les URL lorsqu'elles sont multiples.

Le code donné par montoya pour le corriger ne fonctionne pas, il retourne les erreurs suivantes :

Unknown modifier 'r' ......

Quel est donc le code à mettre pour supporter les deux types d'URL dans une même zone de texte ?

Merci
Messages postés
281
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
11 avril 2013

je m'explique :

Quand on selectionne un texte dans le textearea, pour lui appliquer les balises BBCode tels que : [bold]texte/blod ou [italic]texte/italic ou
texte
, il y a une fonction qui fasse cela !

alors comment elle doir etre ?

merci.
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.