here is my full code
Code: Select all
<?php
//
// BBcode.php
// Desc: Parses BBcode
//
class bbcode{
function parse($code){
$code = preg_replace( "/<br>|<br \/>/", "\n", $code);
////////////////////
// Parse the BBcode
////////////////////
// First theCode: Select all
tags
$code = preg_replace_callback( "#\[code\](.+?)\[/code\]#is", array( &$this, 'code' ), $code);
// Automatically parse urls
$code = preg_replace_callback("#(^|\s|>)((http|https|news|ftp)://\w+[^\s\[\]\<]+)#i", array( &$this, 'autourl' ), $code);
// More Code
$code = preg_replace_callback( "#\[php\](.+?)\[/php\]#is", array( &$this, 'php' ), $code);
// Img and flash tags
$code = preg_replace_callback("#\[img\](.+?)\[/img\]#i", array( &$this, 'img'), $code);
// Basic stuff
$code = $this->simple_tags("b", "b", $code);
$code = $this->simple_tags("u", "u", $code);
$code = $this->simple_tags("i", "i", $code);
$code = $this->simple_tags("s", "strike", $code);
$code = $this->simple_tags("sup", "sup", $code);
$code = $this->simple_tags("sub", "sub", $code);
// (c), (tm) and (r)
$code = preg_replace( "#\(c\)#i" , "©" , $code );
$code = preg_replace( "#\(tm\)#i" , "™" , $code );
$code = preg_replace( "#\(r\)#i" , "®" , $code );
// [email]abc@index.com[/email]
// [email=abc@index.com]Email me[/email]
$code = preg_replace( "#\[email\](\S+?)\[/email\]#i" , "<a href=\"mailto:\\1\">\\1</a>", $code );
$code = preg_replace( "#\[email\s*=\s*\"\;([\.\w\-]+\@[\.\w\-]+\.[\.\w\-]+)\s*\"\;\s*\](.*?)\[\/email\]#i" , "<a href=\"mailto:\\1\">\\2</a>", $code );
$code = preg_replace( "#\[email\s*=\s*([\.\w\-]+\@[\.\w\-]+\.[\w\-]+)\s*\](.*?)\[\/email\]#i" , "<a href=\"mailto:\\1\">\\2</a>", $code );
// [url]http://www.index.com[/url]
// [url=http://www.index.com]forum[/url]
$code = preg_replace_callback("#\[url\](.*?)\[/url\]#is", array( &$this, 'url'), $code);
$code = preg_replace_callback("#\[url=(?:\"\;|\")(.*?)(?:\"\;|\")\](.*?)\[\/url\]#is", array( &$this, 'url'), $code);
//replace the the line breaks back
$code = str_replace("\n", "<br />", $code);
return $code;
}
function code($matches = array()){
//-----------------------------------------
// Reserve Indentations
//-----------------------------------------
$txt = rtrim( $matches[1] );
$txt = preg_replace( "#^(\n+)(.+?)$#s", "\\2", $txt );
if ( $txt == "" )
{
return;
}
//-----------------------------------------
// remove most of the common smily characters.
//-----------------------------------------
$txt = str_replace( "<" , "<" , $txt );
$txt = str_replace( ">" , ">" , $txt );
$txt = str_replace( "<" , "<" , $txt );
$txt = str_replace( ">" , ">" , $txt );
$txt = str_replace( """ , """ , $txt );
$txt = str_replace( ":" , ":" , $txt );
$txt = str_replace( "[" , "[" , $txt );
$txt = str_replace( "]" , "]" , $txt );
$txt = str_replace( ")" , ")" , $txt );
$txt = str_replace( "(" , "(" , $txt );
$txt = str_replace( "\r" , "<br />", $txt );
$txt = str_replace( "\n" , "<br />", $txt );
$txt = preg_replace( "#\s{1};#" , ";" , $txt );
//-----------------------------------------
// Ensure that spacing is preserved
//-----------------------------------------
$txt = preg_replace( "#\t#" , " ", $txt );
$txt = preg_replace( "#\s{2}#", " " , $txt );
return "<code>$txt</code>";
}
function simple_tags($tag, $html_tag, $source){
$default = "#\[".$tag."\](.*?)\[\/".$tag."\]#is";
$replace = "<".$html_tag.">$1</".$html_tag.">";
$txt = preg_replace($default, $replace, $source);
return $txt;
}
function img($matches = array()){
$url = trim($matches[1]);
//-----------------------------------------
// XSS check
//-----------------------------------------
$url = urldecode( $url );
$url = str_replace( "document.cookie", "" , $url );
return "<img src='".$url."' border='0' />";
}
function autourl($matches = array()){
$url = trim($matches[2]);
return "<a href='".$url."'>".$url."</a>";
}
function url($matches = array()){
$url = $matches[1];
$url = trim($url);
$txt = $matches[2] ? $matches[2] : $matches[1];
return "<a href='".$url."'>".$txt."</a>";
}
function php($matches = array()){
$txt = rtrim( $matches[1] );
$txt = preg_replace( "#^(\n+)(.+?)$#s", "\\2", $txt );
if ( $txt == "" )
{
return;
}
$code = highlight_string($txt);
return "<code>".$code."</code><br>";
}
}
?>