preg_replace accepts arrays as well for patterns and replacements.
Use the notation $n
in the replacement part instead of \n
that is reserved for the pattern.
Here is what I'd do:
function bbcode($string) {
$codes = Array(
'/\[b\](.+?)\[\/b\]/' => '<b>$1</b>',
'/\[i\](.+?)\[\/i\]/' => '<i>$1</i>',
'/\[u\](.+?)\[\/u\]/' => '<u>$1</u>',
'/\[s\](.+?)\[\/s\]/' => '<s>$1</s>',
'/\[url=(.+?)\](.+?)\[\/url\]/' => '<a href="$1">$2</a>',
'/\[image=(.+?)\]/' => '<div class="centered"><img src="$1" alt=""></div>'
);
$bbcode = preg_replace(array_keys($codes), array_values($codes), $string);
return stripslashes(nl2br($bbcode));
}