Я использую preg_replace для преобразования всех BBCode в HTML, но не могу заставить работать теги img. Вот мой код:
$search = array (
'/(\[b\])(.*?)(\[\/b\])/m',
'/(\[i\])(.*?)(\[\/i\])/m',
'/(\[u\])(.*?)(\[\/u\])/m',
'/(\[ul\])(.*?)(\[\/ul\])/m',
'/(\[li\])(.*?)(\[\/li\])/m',
'/(\[user=)(.*?)(\])(.*?)(\[\/user\])/m',
'/(\[url=)(.*?)(\])(.*?)(\[\/url\])/m',
'/(\[url\])(.*?)(\[\/url\])/m',
'/(\[img=)(.*?)(\])(.*?)(\[\/img\])/m',
'/(\[quote\])(.*?)(\[\/quote\])/m',
'/(\[code\])(.*?)(\[\/code\])/m',
);
$replace = array (
'<strong>$2</strong>',
'<em>$2</em>',
'<u>$2</u>',
'<ul>$2</ul>',
'<li>$2</li>',
'<a href="../login/profile?u=$2" target="_blank">$2</a>',
'<a href="$2" target="_blank">$4</a>',
'<a href="$2" target="_blank">$2</a>',
'<img src="$4"></img>',
'<quote>$2</quote>',
'<code>$2</code>'
);
$string = preg_replace($search, $replace, $string);
Сейчас он создает тег изображения со ссылкой, но добавляет ]
к началу и концу ссылки, чтобы он не отображал изображение правильно.
EDIT:
Это происходит из-за того, что я конвертирую ссылки в теги привязки, и это противоречит внутри [img] BBCode.
$url = '/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/';
$string = preg_replace($url, '[url=$0]$0[/url]', $string);