Разбор BB-кода vBulletin в PHP - PullRequest
       3866

Разбор BB-кода vBulletin в PHP

4 голосов
/ 02 июня 2010

Мне нужна функция, которая анализирует BB-код из vBulletin в стандартную разметку HTML.

Без использования библиотеки PEAR или расширения PECL, потому что я не хочу возиться с PEAR или должен зависеть от возможности установить расширение PECL на каждый экземпляр этого приложения. Цель - ноль зависимостей . Было бы хорошо, если бы я мог найти исходный код для расширения PEAR и изменить его, но я, похоже, не смогу.

Конкретно проблема, с которой я сталкиваюсь, соответствует [quote=My Name]. Имя «Мое имя» ничем не заключено и может содержать пробелы.

Ответы [ 5 ]

1 голос
/ 26 сентября 2010

(вступление: 5 лет разработки с vBulletin)

Парсер vBulletin довольно сложный (возможно, излишне?) По сравнению с большинством регулярных выражений или выпадающих библиотек. Честно говоря, я просто покопался бы в этом и вытащил все, что можно, поскольку они, как правило, делают что-то немного по-другому. Я был бы удивлен, если бы вы получили отлично работающий парсер, не видя, как они на самом деле генерируют / анализируют его сами.

Если это старые данные, вы можете просто написать свои собственные, но если это старые и новые данные, поступающие, почему бы просто не кэшировать их на стороне vBulletin и использовать то, что они генерируют? Или просто используйте класс vB_BbCode_Parser напрямую ...

Надеюсь, это поможет.

1 голос
/ 02 июня 2010

Один из способов сделать это - использовать http://www.christian -seiler.de / projekte / php / bbcode / index_en.html

Страница проекта также содержит ссылки на похожие работы; один из них может быть полезен, даже если он вам не нравится.

1 голос
/ 02 июня 2010

Ну, в дополнение к пакету PEAR и расширению PECL у вас также есть пакет Zend Framework под названием Zend_Markup , который очень прост в использовании (ZF слабо связан, так что вы можете использовать только этот компонент). Есть также довольно много классов на PHP Classes .

0 голосов
/ 02 июня 2010

Один из самых сложных способов использования регулярных выражений:

$text = "[quote=my name]something.
[b]bla[b]
blabla.[/quote]";
$search = "/\[quote=(?>([a-z0-9]*))\](.*)\[/quote\]/is";
$replace = "From <i>$1</i>: <q>$2</q>";
$return_text = preg_replace($search, $replace, $text);

echo nl2br($return_text);

/*
From <i>my name</i>: <q>something.
[b]bla[b]
blabla.</q>
*/

Я говорю самое сложное только из-за вероятности катастрофического возврата на этот «(. *)», Особенно с более длинным текстом, и из-за вероятности проскальзывания некоторых совпадений через трещины. Итак, вы можете перейти непосредственно к источнику, чтобы найти правильное регулярное выражение: http://www.bbcode.org/implementations.php (см .: Простой и сложный BBCode с PHP для регулярного выражения, phpBBCode для исходного кода ). Кроме того, вы можете продублировать исходный код анализатора Pear и создать его здесь: http://svn.php.net/viewvc/pear/packages/HTML_BBCodeParser

0 голосов
/ 02 июня 2010

Я предлагаю вам просто адаптировать расширение PEAR. Он не зависит от других библиотек PEAR, поэтому он должен быть достаточно простым.

...