Traiter le BBCode
Par CrazyCat le 22/10/2010, 16:07 - Vieilleries - Lien permanent
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)
Commentaires
Magnifique, merci pour ce code.