Проблема с кодом BB PHP


Хорошо, поэтому я использую небольшую функцию bbcode для форума, который у меня есть, работает хорошо, поэтому, если, например, я помещу

[b]Text[/b]

Текст будет напечатан жирным шрифтом.

Моя проблема в том, что если у меня есть этот код:

[b]
Text[/b]

Ну, это не сработает, и просто распечатайте это так, как сейчас.

Вот пример функции, которую я использую:

function BBCode ($string) {
$search = array(
    '#\[b\](.*?)\[/b\]#',
);
$replace = array(
    '<b>\\1</b>',
);
return preg_replace($search , $replace, $string);
}

Затем при повторении этого:

.nl2br(stripslashes(BBCode($arr_thread_row[main_content]))).

Итак, мой вопрос будет заключаться в том, что необходимо, чтобы BBCode работал со всем, что внутри него, но не обязательно на той же линии.

В примере:

[b]




Text



[/b]

Было бы просто

Текст

Спасибо за любую помощь!

Алекс

 2
Author: Alex Cane, 2010-09-28

3 answers

Вам нужен многострочный модификатор, который делает ваш шаблон чем-то вроде #\[b\](.*?)\[/b\]#ms

(обратите внимание на завершающий m)

 2
Author: Mark Elliot, 2010-09-28 01:06:23

На самом деле существует расширение pecl, которое анализирует BBCode, что было бы быстрее и безопаснее, чем писать его с нуля самостоятельно.

 2
Author: ryeguy, 2010-09-28 00:57:31

Я использую это... Это должно сработать.

$bb1 = array(
"/\[url\](.*?)\[\/url\]/is",
"/\[img\](.*?)\[\/img\]/is",
"/\[img\=(.*?)\](.*?)\[\/img\]/is",
"/\[url\=(.*?)\](.*?)\[\/url\]/is",
"/\[red\](.*?)\[\/red\]/is",
"/\[b\](.*?)\[\/b\]/is",
"/\[h(.*?)\](.*?)\[\/h(.*?)\]/is",
"/\[php\](.*?)\[\/php\]/is"
);

$bb2 = array(
'<a href="\\1">\\1</a>',
'<img alt="" src="\\1"/>',
'<img alt="" class="\\1" src="\\2"/>',
'<a rel="nofollow" target="_blank" href="\\1">\\2</a>',
'<span style="color:#ff0000;">\\1</span>',
'<span style="font-weight:bold;">\\1</span>',
'<h\\1>\\2</h\\3>',
'<pre><code class="php">\\1</code></pre>'
);

$html = preg_replace($bb1, $bb2, $html);
 0
Author: Dejan Marjanovic, 2010-09-28 01:10:44