Ответ 1
Попробуйте эту функцию:
<?php
function bbcode ($bbcode) {
$matches = array();
if(preg_match_all ( "/\[list.*\].*\[\/list.*\]/Ui", $bbcode, $matches ) > 0)
{
$matches = $matches[0];
foreach($matches as $match)
{
$replace = $match;
$replace = preg_replace('/\[list:.*\](.*)\[\/list:.*\]/Ui', '<ul>\1</ul>', $replace);
$replace = preg_replace('/\[list=1:.*\](.*)\[\/list:.*\]/Ui', '<ol>\1</ol>', $replace);
$replace = preg_replace('/\[list=a:.*\](.*)\[\/list:.*\]/Ui', '<ol type="a">\1</ol>', $replace);
$replace = preg_replace('/\[\*.*\](.*)<br>/Ui', '<li>\1</li>', $replace);
$replace = preg_replace('/<br>/Ui', '</li><li>', $replace);
$replace = preg_replace('/l\>\<\/li\>/Ui', 'l>', $replace);
$replace = preg_replace('/\<li\>\<\//Ui', '</', $replace);
$replace = str_replace('<li><li>', '<li>', $replace);
$bbcode = str_replace($match, $replace, $bbcode);
}
}
$search = array (
"/\n/", //newlines
"/\[b:.*\](.*)\[\/b:.*\]/Ui", //bold
"/\[i:.*\](.*)\[\/i:.*\]/Ui", //italic
"/\[u:.*\](.*)\[\/u:.*\]/Ui", //underline
"/\[img:.*\](.*)\[\/img:.*\]/Ui", //images
"/\[code:.*\](.*)\[\/code:.*\]/Ui", //code-blocks
"/\[url\](.*)\[\/url\]/Ui", //links
"/\[url=(.*)\](.*)\[\/url\]/Ui", //links with names
"/\[color.*\](.*)\[\/color.*\]/Ui", //color
"/\[size.*\](.*)\[\/size.*\]/Ui", //color
"/\[quote:[^\]=]*\](.*)\[\/quote[^\]]*\]/i",
"/\[quote:[^\]]*=\"([^\"]*)\"\](.*)\[\/quote[^\]]*\]/i",
);
$replace = array (
'<br>',
'<b>\1</b>',
'<i>\1</i>',
'<u>\1</u>',
'<a href="\1">\1</a>', //images to links
'<pre>\1</pre>',
'<a href="\1">\1</a>',
'<a href="\1">\2</a>',
'\1',
'\1',
'<blockquote style="border:1px solid black;">\1</blockquote>',
'<blockquote style="border:1px solid black;">\1:<br> \2</blockquote>',
);
$count = 0;
$bbcode = preg_replace($search, $replace, $bbcode, -1, $count);
if($count == 0) return $bbcode;
else return bbcode($bbcode);
}
echo bbcode($bbcode);
?>
Это должно делать все необходимые вам замены:)