Du bbcode au (x)html

Contenu du snippet

Ce code permet d'utiliser du bbcode à la place du HTML, pour des raisons de sécurité et de simplicité pour les utilisateurs :)
Merci de noter que c'est mon premier code sur phpcs ^__^' (voir tout premier code publié <__<')
Pensez bien à prendre les balises <style></style> (configuration modifiable à souhait)

Merci de signaler si vous voyez d'autres balises à ajouter dans les commentaires si il le faut :-)

Source / Exemple :


<style>
.code {
	border: 1px solid #657985;
	padding-left: 10px;
	background-color:#d3dbdf;
}

.quote {
	border: 1px dotted #657985;
	padding-left: 10px;
	background-color:#eeeeee;
}
</style>
<?php
//By Talus
function parse_css($texte) {
	$texte[1] = html_entity_decode($texte[1], true);
	
	$texte[1] = preg_replace('`((.*)(:)(.*)(;))+`x','<span style="color: navy;">$2</span><span style="color: fuchsia;">$3</span><span style="color: blue;">$4</span><span style="color: fuchsia;">$5</span>', $texte[1]);
		   
	$texte[1] = preg_replace('`((.*) \n? {)`x','<span style="color: fuchsia;">$1</span>', $texte[1]);
	$texte[1] = preg_replace('`(/\*(.*)\*/)`xs','<span style="color: gray;">$1</span>', $texte[1]);
	$texte[1] = str_replace('}','<span style="color: fuchsia;">}</span>', $texte[1]);
	
	$texte[1] = preg_replace('`<span style="color: (.*);">(.*)</span>`sU', '<span style="color:$1">[color=$1]$2/color</span>',$texte[1]);
			
	$texte[1] = str_replace('\n','', $texte[1]);
	$texte[1] = preg_replace('`(/\*\n?(.*)\n?\*/)`xsU','', $texte[1]);
	
	return '<br /><strong>Code CSS</strong> :<br /><div class="code">' . $texte[1] . '</div><br />';
}
function php_code($code){ //Colorisation de Code PHP
    return '<br /><div class="code_top">Script PHP :</div><div class="code_main">' . highlight_string(html_entity_decode($code[1]), true) . '</div><br />';
}
function forum_code($chaine,$xhtml = FALSE ){ 
	/* Paramètre autorisant (ou non) le HTML dans la chaine $chaine, et autorisant les sauts de lignes*/
	$chaine = nl2br(!$xhtml ? htmlentities($chaine) : $chaine);

	// Bloc des balises [url]-/url
	$chaine = preg_replace('`\[url=([http://].+?)](.+?)\/url`si','<a href="#" onclick="window.open(\'$1\',\'popup\');" title="$1">$2</a>',$chaine); 
	$chaine = preg_replace('`\[url=(.+?)](.+?)\/url`si','<a href="#" onclick="window.open(\'http://$1\',\'popup\');" title="$1">$2</a>',$chaine); 
	$chaine = preg_replace('`\[url]([http://].+?)\/url`si','<a href="#" onclick="window.open(\'$1\',\'popup\');" title="$1">$1</a>',$chaine); 
	$chaine = preg_replace('`\[url](.+?)\/url`si','<a href="#" onclick="window.open(\'http://$1\',\'popup\');" title="$1">$1</a>',$chaine); 
	     
	// Bloc des balises [b]-/b
	$chaine = preg_replace('#\[b](.+?)\/b#si','<strong>$1</strong>',$chaine); 
	
	// Bloc des balises [u]-/u
	$chaine = preg_replace('#\[u](.+?)\/u#si','<span style="text-decoration:underline;">$1</span>',$chaine);
	
	// Bloc des balises [i]-/i
	$chaine = preg_replace('#\[i](.+?)\/i#si','<em>$1</em>',$chaine);
	
	// Bloc des balises [strike]-/strike
	$chaine = preg_replace('#\[strike](.+?)\/strike#si','<span style="text-decoration:line-through;">$1</span>',$chaine); 
	
	// Bloc des balises [overline]-/overline
	$chaine = preg_replace('#\[overline](.+?)\/overline#si','<span style="text-decoration:overline;">$1</span>',$chaine); 
	
	// Bloc des balises [code]-/code
	$chaine = preg_replace('#\[code](.+?)\/code#si','<br /><strong>div :</strong> :<br /><div class="div">$1</div><br />',$chaine);
	$chaine = preg_replace_callback('#\[code=css](.+?)\/code#si','parse_css',$chaine);	
	$chaine = preg_replace_callback('#\[code=php](.+?)\/code#si','php_code',$chaine);
	
	// Bloc des balises [quote]-/quote
	$chaine = preg_replace('#\[quote=me](.+?)\/quote#si','<br /><strong>J\'ai écrit</strong> :<br/><div class="quote">$1 </div><br />',$chaine); 
	$chaine = preg_replace('#\[quote=(.+?)](.+?)\/quote#si','<br /><strong>$1 a écrit</strong> :<br/><div class="quote">$2 </div><br />',$chaine); 
	$chaine = preg_replace('#\[quote](.+?)\/quote#si','<br /><strong>Citation</strong> :<br/><div class="quote">$1 </div><br />',$chaine); 
	
	// Bloc des balises [img]-/img
	$chaine = preg_replace('#\[img=(.+?)](.+?)\/img#si','<img src="$1" border="0" alt="$2" />',$chaine);
	$chaine = preg_replace('#\[img](.+?)\/img#si','<img src="$1" border="0" />',$chaine);
	
	// Bloc des balises [mail]-/mail
	$chaine = preg_replace('#\[mail=([mailto:].+?)](.+?)\/mail#si','<a href="$1">$2</a>',$chaine); 
	$chaine = preg_replace('#\[mail=(.+?)](.+?)\/mail#si','<a href="mailto:$1">$2</a>',$chaine); 
	$chaine = preg_replace('#\[mail]([mailto:].+?)\/mail#si','<a href="$1">$1</a>',$chaine); 
	$chaine = preg_replace('#\[mail](.+?)\/mail#si','<a href="mailto:$1">$1</a>',$chaine); 
	
	// Bloc des balises [align]-/align
	$chaine = preg_replace('#\[align=(left|center|right)](.+?)\/align#si','<div style="text-align:$1; width:100%;">$2</div>',$chaine); 
	
	// Bloc des balises [color]-/color
	$chaine = preg_replace('#\[color=(.+?)](.+?)\/color#si','<span style="color:$1;">$2</span>',$chaine); 
	
	// Bloc des balises [size]-/size
	$chaine = preg_replace('#\[size=([0-9]{1,2})](.+?)\/size#si','<span style="font-size:$1px;">$2</span>',$chaine); 
	
	// Bloc des balises [thick]-/thick
	$chaine = preg_replace('#\[thick=([0-9]{1,3})](.+?)\/thick#si','<span style="font-weight:$1px;">$2</span>',$chaine); 
	
	// Bloc des balises [style]-/style
	$chaine = preg_replace('#\[style=(normal|italique|oblique)](.+?)\/style#si','<span style="font-style:$1;">$2</span>',$chaine); 
	
	// Bloc des balises [weight]-/weight
	$chaine = preg_replace('#\[weight=(lighter|bold|bolder)](.+?)\/weight#si','<span style="font-weight:$1;">$2</span>',$chaine); 
	
	// Bloc des balises [decoration]-/decoration
	$chaine = preg_replace('#\[decoration=(underline|line-through|overline|blink)](.+?)\/decoration#si','<span style="font-weight:$1;">$2</span>',$chaine); 
	
	// Bloc des balises [font]-/font
	$chaine = preg_replace('#\[font=(.+?)](.+?)\/font#si','<span style="font-family:$1;">$2</span>',$chaine);

	// Bloc des balises [list]-/list
	$chaine = preg_replace('`\[list=(circle|disc|square|i)](.+?)\/list`si','<ul type="$1">$2</ul>',$chaine);
	$chaine = preg_replace('`\[list](.+?)\|/list]`si','<ul>$1</ul>',$chaine);
	
	// Bloc des balises [*]
	$chaine = preg_replace('`\[\*=(circle|disc|square|i)](.+?)`si','<li type="$1">$2',$chaine);
	$chaine = preg_replace('`\[\*](.+?)`si','<li>$1',$chaine);
	
	return $chaine;
}
// /!\ Appel de la fonction : echo forum_code($chaine);
/* IMPORTANT : PENSEZ A METTRE LES STYLES (balises) POUR UNR BONNE MISE EN FORME DE CERTAINES BALISES TELLES QUE LES [div], [QUOTE] ! */
echo forum_code('[code=php]<?php echo 'coucou'; ?>/code');
?>

Conclusion :


Merci à XwZ du forum PHPDebutant qui m'a aidé à me démeler avec les Expressions Régulières ;o)

Liste des balises (+ Explications) :
->[url=x]titre lien/url
->[url]adresse_lien/url

-> [b]texte en gras/b
-> [i]texte en italique/i
-> [u]texte souligné/u
-> [strike]texte barré/strike
-> [overline]texte surligné/overline

-> [code]code/code
-> [code=css]Code CSS/code
-> [code=php]Script PHP (! en incluant les ouvertures et fermetures !)/code

->[quote=me]Citation de vous/quote
->[quote=quelqu'un]Citation de quelqu'un/quote
->[quote]citation sans auteur / nom/quote

->[img=adresse_image]titre de l'image/quote
->[img]adresse_image/img

-> [align]texte soit à gauche, soit au centre, soit à droite, soit justifié/align

-> [color=x]texte en couleur x/color
-> [size=x]texte d'une taille x/size
-> [thick=x]texte d'une epaisseur x/thick
-> [style]texte soit normal, soit italic, soit oblique/style
-> [weight]texte soit gras clair, gras, ou gras foncé/weight
-> [font=x]texte écrit dans la police x/font

->[list=(circle|disc|square|i)]list avec des puces en forme de cercle / disque / carrés / chiffres romains/list
->[list]texte listé/list
->[*]premier élément de la liste [*]2nd élément [*]3ème (.....) (avec les mêmes option que [list]/list)

Pour appeler appeler (utiliser) la fonction, pensez à mettre l'instruction <?php echo forum_code($chaine); ?> (ou <?php echo forum_code($chaine,true); ?> si vous voulez que le code html soit possible)

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.

Du même auteur (OniTalus)