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!!!