2016-08-03 5 views
0

Итак, я использую это заменить BBCode в HTML:PHP preg_replace на правильный

$text = htmlspecialchars($text); 

$advanced_bbcode = array(
    '#\[quote](\r\n)?(.+?)\[/quote]#si', 
    '#\[url](.+)\[/url]#Usi'); 

$advanced_html = array(
    '<blockquote class="quote">$2</blockquote>', 
    '<a rel="nofollow" target="_blank" href="$1">$1</a>'); 

$text = preg_replace($advanced_bbcode, $advanced_html,$text); 
echo nl2br($text); 

public static function nl2br($var) 
{ 
    return str_replace(array('\\r\\n','\r\\n','r\\n','\r\n', '\n', '\r'), '<br />', nl2br($var)); 
} 

Это прекрасно работает, если у меня есть только 1 котировку, но если я использую несколько цитат, как: [quote][quote][quote]first[/quote]second[/quote]end[/quote]

Я ожидаю, чтобы получить:

<blockquote class="quote"><blockquote class="quote"><blockquote class="quote">first</blockquote>second</blockquote>end</blockquote> 

Но поскольку она занимает первое [/ qoute] он превратится в:

<blockquote class="quote">[quote][quote]first</blockquote>second[/quote]end[/quote] 

Я искал его, но я не могу найти что-нибудь, что работает для меня. Я новичок в этом.

Спасибо.

+0

используйте современные решения для BBCode, я рекомендую мою собственную библиотеку https://github.com/thunderer/Shortcode. С удовольствием отвечаю на любые вопросы. –

ответ

3

Make заменить до тех пор, пока BBCode в строке

do { 
    $text = preg_replace($advanced_bbcode, $advanced_html,$text,-1,$c); 
} while($c); 

demo

+0

Это сделало эту работу! Благодаря! – wtm

+0

Добро пожаловать! – splash58