Compilateur/décompilateur de bcode


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

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.