Allora visto che stiamo smanettando tutti e due ti posto i codici funzionanti di bbcode, smiley con un relativo esempio che mi sono fatto... la parte finale dei bbcode è MOLTO MOLTO casareccia ma almeno funziona (in pratica prendo le immagini singole non tutto in automatico)

Classe BBCode: (bbcode.class.php)

Codice PHP:
<?php
class BBCode {
    
    function 
Text_Replace($text) {
        
        
$tag = array(
            
'/\[b\](.*)\[\/b\]/',
            
'/\[i\](.*)\[\/i\]/',
            
'/\[u\](.*)\[\/u\]/',
            
'/\[s\](.*)\[\/s\]/',
            
'/\[h1\](.*)\[\/h1\]/',
            
'/\[h2\](.*)\[\/h2\]/',
            
'/\[h3\](.*)\[\/h3\]/',
            
'/\[h4\](.*)\[\/h4\]/',
            
'/\[h5\](.*)\[\/h5\]/',
            
'/\[h6\](.*)\[\/h6\]/',
            
'/(\[url=)(.+)(\])(.+)(\[\/url\])/',
            
'/\[img\](.*?)\[\/img\]/',
            
'/(\[size=)(.+)(\])(.*?)(\[\/size\])/',
            
'/(\[color=)(.+)(\])(.*?)(\[\/color\])/',
            
'/\[list\](.*)\[\/list\]/',
            
'/\[li\](.*)\[\/li\]/',
            
'/\[marquee\](.*)\[\/marquee\]/',
            
'/\[center\](.*)\[\/center\]/',
            
'#\[code\](.*?)\[\/code\]#e',
            
            
// BBCode Video
            
'/\[yb\](.*)\[\/yb\]/',            
        );
        
        
$replace = array(
            
'[b]$1[/b]',
            
'[i]$1[/i]',
            
'<u>$1</u>',
            
'<s>$1</s>',
            
'<h1>$1</h1>',
            
'<h2>$1</h2>',
            
'<h3>$1</h3>',
            
'<h4>$1</h4>',
            
'<h5>$1</h5>',
            
'<h6>$1</h6>',
            
'[url="$2"]$4[/url]',
            
'[img]$1[/img]',
            
'<span style="font-size:$2px">$4</span>',
            
'<span style="color:$2">$4</span>',
            
'<ul>$1[/list]',
            
'[*]$1',
            
'<marquee>$1</marquee>',
            
'<center>$1</center>',
            
"'<div class=\"code\">'.highlight_string(stripslashes('$1'), true).'</div>'",
            
            
// BBCode Video
            
'<object width="425" height="344">
            <param name="movie" value="http://www.youtube.com/v/$1"></param>
            <param name="allowFullScreen" value="true"></param>
            <param name="allowscriptaccess" value="always"></param>
            <embed src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed>
            </object>'
,
        );  
        
        
$text preg_replace($tag$replace$text);
        
        return 
$text;                 
    }
    
    function 
Print_BBCode() {
        
        
$dir "template/bbcode";
        
        print(
"<img src=\"$dir/b.png\" onClick=\"document.textarea.text.value+='[b]Text[/b]'\">");
        print(
"<img src=\"$dir/i.png\" onClick=\"document.textarea.text.value+='[i]Text[/i]'\">");
        print(
"<img src=\"$dir/u.png\" onClick=\"document.textarea.text.value+='[u]Text[/u]'\">");
        print(
"<img src=\"$dir/s.png\" onClick=\"document.textarea.text.value+='[s]Text[/s]'\">");
        print(
"<img src=\"$dir/h1.png\" onClick=\"document.textarea.text.value+='[h1]Text[/h1]'\">");
        print(
"<img src=\"$dir/h2.png\" onClick=\"document.textarea.text.value+='[h2]Text[/h2]'\">");
        print(
"<img src=\"$dir/h3.png\" onClick=\"document.textarea.text.value+='[h3]Text[/h3]'\">");
        print(
"<img src=\"$dir/h4.png\" onClick=\"document.textarea.text.value+='[h4]Text[/h4]'\">");
        print(
"<img src=\"$dir/h5.png\" onClick=\"document.textarea.text.value+='[h5]Text[/h5]'\">");
        print(
"<img src=\"$dir/h6.png\" onClick=\"document.textarea.text.value+='[h6]Text[/h6]'\">");
        print(
"<img src=\"$dir/ul.png\" onClick=\"document.textarea.text.value+='[ul]Text[/ul]'\">");
        print(
"<img src=\"$dir/li.png\" onClick=\"document.textarea.text.value+='[li]Text[/li]'\">");
        print(
"<img src=\"$dir/center.png\" onClick=\"document.textarea.text.value+='[center]Text[/center]'\">");
        print(
"<img src=\"$dir/marquee.png\" onClick=\"document.textarea.text.value+='[marquee]Text[/marquee]'\">");
        print(
"<img src=\"$dir/font.png\" onClick=\"document.textarea.text.value+='[size=Number]Text[/size]'\">");
        print(
"<img src=\"$dir/colour.png\" onClick=\"document.textarea.text.value+='[colour=Name]Text[/colour]'\">");
        print(
"<img src=\"$dir/code.png\" onClick=\"document.textarea.text.value+='[code]Text[/code]'\">");
        print(
"<img src=\"$dir/img.png\" onClick=\"document.textarea.text.value+='[img]URL[/img]'\">");
        print(
"<img src=\"$dir/url.png\" onClick=\"document.textarea.text.value+='[url=URL]Text[/url]'\">");
        print(
"<img src=\"$dir/yb.png\" onClick=\"document.textarea.text.value+='[yb]Video ID[/yb]'\">");

    }
}
?>

Classe Smiley: smiley.class.php
Codice PHP:
<?php
class Smiley {
        
    function 
Text_Replace($text) {
        
        
$dir "template/smiley";
        
$directory opendir($dir);
        
        while (
$smiley readdir($directory)) {
            if (
$smiley != "." && $smiley != "..") {
                
$value str_replace(".gif"""$smiley);
                
$text str_replace($value"<img src=\"$dir/$smiley\">"$text);
            }
        } 
        
        return 
$text;
    }
    
    function 
Print_Smiley() {
        
        
$dir "template/smiley";
        
$directory opendir($dir);
        
        while (
$smiley readdir($directory)) {
            if (
$smiley != "." && $smiley != "..") {
                
$value str_replace(".gif"""$smiley);
                print(
"<img src=\"$dir/$smiley\" onClick=\"document.textarea.text.value+='$value'\">");
            }
        } 
    }
}
?>

ESEMPIO:
Codice PHP:
<?php 
require_once('bbcode.class.php');
require_once(
'smiley.class.php');
$bbcode = new BBCode();
$smiley = new Smiley();
?>

<?php 
$bbcode
->Print_BBCode();
print(
"
"
);
$smiley->Print_Smiley();
?>

<form action="" method="post" name="textarea">
<textarea name="text"></textarea>

<input type="submit" name="submit" value="Replace" />
</form>

<?php
if (isset($_POST['submit'])) {
    
$text $_POST['text'];
    
    
$text $bbcode->Text_Replace($text);
    
$text $smiley->Text_Replace($text);
    
    print(
$text);
}
?>
Questo esempio è privo di sicurezza perchè sto realizzando un CMS e la classe di sicurezza che ho creato non l'ho ancora impementata...

Spero di esserti di aiuto in questo modo

IMPORTANTE: ATTENTO CHE QUANDO HO POSTATO IL CODICE SI E' MODIFICATO QUINDI NELLA FUNZIONE BBCODE CI SONO DEGLI ERRORI NON VOLUTI PURTROPPO!!!