кавычки BB кода, как> - PullRequest
       24

кавычки BB кода, как>

0 голосов
/ 26 августа 2011

Привет, я использую довольно простой парсер bbcode.

Не могли бы вы, ребята, помочь мне с моей проблемой?

но когда, например, написано:

[quote=tanab][quote=1][code]a img{
text-decoration: none;
}[/code][/quote][/quote]

вывод такой:

tanab said:
[quote=1]
a img{
    text-decoration: none;
}
[/quote] 

как бы мне пойти и исправить это? я действительно плохой во всем preg_replace материал.

это мой парсер:

function bbcode($input){
$input = htmlentities($input);

$search = array(
            '/\[b\](.*?)\[\/b\]/is',
            '/\[i\](.*?)\[\/i\]/is',
            '/\[img\](.*?)\[\/img\]/is',
            '/\[url=(.*?)\](.*?)\[\/url\]/is',
            '/\[code\](.*?)\[\/code\]/is',
            '/\[\*\](.*?)/is',
            '/\\t(.*?)/is',
            '/\[quote=(.*?)\](.*?)\[\/quote\]/is',
);

$replace = array(
            '<b>$1</b>',
            '<i>$1</i>',
            '<img src="$1">',
            '<a href="$1">$2</a>',
            '<div class="code">$1</div>',
            '<ul><li>$1</li></ul>',
            '&nbsp;&nbsp;&nbsp;&nbsp;',
            '<div class="quote"><div class="quote-writer">$1 said:</div><div class="quote-body">$2</div></div>',

);

return preg_replace($search,$replace,$input);

}

1 Ответ

0 голосов
/ 26 августа 2011

Это может быть адаптировано с рекурсивным регулярным выражением:

 '/\[quote=(.*?)\](((?R)|.*?)+)\[\/quote\]/is'

Что, по крайней мере, гарантирует, что выходные элементы div не будут неправильно вложены. Но вам все равно придется запустить регулярное выражение дважды или трижды, чтобы перехватить все блоки цитат.

В противном случае потребуется переписать ваш код с preg_replace_callback. Который я не могу потрудиться продемонстрировать, так как это уже встречалось несколько десятков раз (попробуйте поиск по сайту!), Было решено ранее и т. Д.

...