Le BBCode est fréquemment utilisé, voici une fonction qui permet de s'en servir sur son site.
Il y a en fait plusieurs fonctions, la plus importante est bbcode() qui traite la chaîne (donc à utiliser à l'affichage).
Les autres fonctions servent à reformater les chaînes particulières qui ont besoin d'un remplacement plus évolué, comme les liens, les images ou les listes.
<?php
function bbcode($string) {
$pattern = array(
'/\\n/',
'/\\r/',
'/\[list\](.*?)\[\/list\]/ise',
'/\[b\](.*?)\[\/b\]/is',
'/\[strong\](.*?)\[\/strong\]/is',
'/\[i\](.*?)\[\/i\]/is',
'/\[u\](.*?)\[\/u\]/is',
'/\[s\](.*?)\[\/s\]/is',
'/\[del\](.*?)\[\/del\]/is',
'/\[url=(.*?)\](.*?)\[\/url\]/ise',
'/\[email=(.*?)\](.*?)\[\/email\]/is',
'/\[img](.*?)\[\/img\]/ise',
'/\[color=(.*?)\](.*?)\[\/color\]/is',
'/\[quote\](.*?)\[\/quote\]/ise',
'/\[code\](.*?)\[\/code\]/ise'
);
$replace = array(
'',
'',
'sList(\'\\1\')',
'<b>\1</b>',
'<strong>\1</strong>',
'<i>\1</i>',
'<span style="text-decoration: underline;">\1</span>',
'<span style="text-decoration: line-through;">\1</span>',
'<span style="text-decoration: line-through;">\1</span>',
'urlfix(\'\\1\',\'\\2\')',
'<a href="mailto:\1" title="\1">\2</a>',
'imagefix(\'\\1\')',
'<span style="color: \1;">\2</span>',
'sQuote(\'\1\')',
'sCode(\'\1\')'
);
return preg_replace($pattern, $replace, nl2br(htmlspecialchars(stripslashes($string))));
}
function sQuote($string) {
return '<div class="quote">' . stripslashes(trim($string)) . '</div>';
}
function sCode($string){
$pattern = '/\<img src=\\\"(.*?)img\/smilies\/(.*?).png\\\" alt=\\\"(.*?)\\\" \/>/s';
$string = preg_replace($pattern, '\3', $string);
return '<pre>' . trim($string) . '</pre>';
}
function sList($string) {
$tmp = explode('[*]', stripslashes($string));
$out = null;
foreach($tmp as $list) {
if(strlen(str_replace('', '', $list)) > 0) {
$out .= '<li>' . trim($list) . '</li>';
}
}
return '<ul>' . $out . '</ul>';
}
function imagefix($img) {
if(substr($img, 0, 7) != 'http://') {
$img = './images/' . $img;
}
return '<img src="' . $img . '" alt="' . $img . '" title="' . $img . '" />';
}
function urlfix($url, $title) {
$title = stripslashes($title);
return '<a href="' . $url . '" title="' . $title . '">' . $title . '</a>';
}
?>
// Utilisation:
echo bbcode($texte)