Home >> Snippet List >> Snippet

Name
Convert BBCode Tags
Description
Compact function that converts BBCode tags to their HTML equivalent
PHP Snippet
<?PHP
 
// Convert BBCodes to their HTML equivalent
FUNCTION do_bbcode($text){
     GLOBAL $lang_common, $FORUM_user;
 
     IF (STRPOS($text, 'quote') !== FALSE){
          $text = STR_REPLACE('[quote]', '</p><blockquote><div class="incqbox"><p>', $text);
          $text = PREG_REPLACE('#\[quote=("|"|\'|)(.*)\\1\]#seU', '"</p><blockquote><div class=\"incqbox\"><h4>".str_replace(array(\'[\', \'\\"\'), array(\'[\', \'"\'), \'$2\')." ".$lang_common[\'wrote\'].":</h4><p>"', $text);
          $text = PREG_REPLACE('#\[\/quote\]\s*#', '</p></div></blockquote><p>', $text);
     }
 
     $pattern = ARRAY('#\[b\](.*?)\[/b\]#s',
                          '#\[i\](.*?)\[/i\]#s',
                          '#\[u\](.*?)\[/u\]#s',
                          '#\[url\]([^\[]*?)\[/url\]#e',
                          '#\[url=([^\[]*?)\](.*?)\[/url\]#e',
                          '#\[email\]([^\[]*?)\[/email\]#',
                          '#\[email=([^\[]*?)\](.*?)\[/email\]#',
                          '#\[color=([a-zA-Z]*|\#?[0-9a-fA-F]{6})](.*?)\[/color\]#s');
 
     $replace = ARRAY('<strong>$1</strong>',
                          '<em>$1</em>',
                          '<span class="bbu">$1</span>',
                          'handle_url_tag(\'$1\')',
                          'handle_url_tag(\'$1\', \'$2\')',
                          '<a href="mailto:$1">$1</a>',
                          '<a href="mailto:$1">$2</a>',
                          '<span style="color: $1">$2</span>');
 
     $text = PREG_REPLACE($pattern, $replace, $text);
 
     RETURN $text;
}
 
 
/////////////////////////////////////
 
     // If the message contains a code tag we have to split it 
        // up (text within [code][/code] shouldn't be touched)
     IF (STRPOS($text, '[code]') !== FALSE && STRPOS($text, '[/code]') !== FALSE){
          LIST($inside, $outside) = split_text($text, '[code]', '[/code]');
          $outside = ARRAY_MAP('ltrim', $outside);
          $text = IMPLODE('<">', $outside);
     }
 
?>