Devi usare preg_replace e le espressioni regolari
se vuoi impararle guarda qui
altrimenti ti faccio vedere quello che usa invision
Codice PHP:
//url normali [url]testo[/url]
$post = preg_replace( "#\[url\](\S+?)\[/url\]#ie" , "regex_build_url(array('html' => '\\1', 'show' => '\\1'))", $post );
// [url="blabla"]testo[/url]
$post = preg_replace( "#\[url\s*=\s*\"\;\s*(\S+?)\s*\"\;\s*\](.*?)\[\/url\]#ie" , "regex_build_url(array('html' => '\\1', 'show' => '\\2'))", $post );
// [url=blabla]testo[/url]
$post = preg_replace( "#\[url\s*=\s*(\S+?)\s*\](.*?)\[\/url\]#ie" , "regex_build_url(array('html' => '\\1', 'show' => '\\2'))", $post );
\\1 contiene il link, \\2 contiene il testo
chiaramente a regex_build_url sostituisci "<a href="\\1">\\2</a>