Парсер BBCode на PHP

tashkentchi

Новичок
Парсер BBCode на PHP

Реализовал класс на PHP для работы с BBCode. Можно скачать бесплатно. Он может быть использован в гостевых книгах, форумах, на досках объявлений и т.п.

Описание класса целиком сверстано в BBCode и конвертирована в HTML с помощью предлагаемого скрипта.

http://www.pc.uz/documents/text/732.html
 

tashkentchi

Новичок
Long
Там регулярки юзаются. А в моем - конечные автоматы. В итоге я могу хоть все богатство ХТМЛ перетащить в ББКод без особой потери в скорости обработки текстов.

Кроме того, HTML_BBCodeParser нельзя использовать без доработки. Он уязвим для Javascript injection.
 

WP

^_^
Встроенный пример у меня аж 0.6 сек парсился. Точка. :D
 

tashkentchi

Новичок
Автор оригинала: WP
Встроенный пример у меня аж 0.6 сек парсился. Точка. :D
На то и тест. "Hello world" распарсился бы мгновенно :)

-~{}~ 28.07.06 01:48:

Занялся статистикой. Тестовый пример содержит

28539 знаков и 1599 тегов

Многие - с атрибутами (до 4-х атрибутов)

Дерево документа имеет 9 уровней вложенности.

Поэтому думаю, что 0.6 секунд - терпимое время для работы парсера.
 

fixxxer

К.О.
Партнер клуба
Есть подозрения, что грамотное решение на регулярках будет во многих случаях быстрее конечного автомата (речь идет только о php). Тестировать лень, просто примерно представляю себе zend байткод в обоих случаях :)
 

tashkentchi

Новичок
fixxxer
Вполне возможно, что в некоторых случаях это так. Например, там, где пользователю достаточно предоставить [ b] и [ i].

Но я плохо представляю, какими и сколькими регулярными выражениями можно добиться, чтобы [ b] закрылось либо на [ /b], либо на [/] (с правильным учетом вложенных элементов), либо перед началом произвольного блочного элемента, либо перед концом объемлющего элемента в зависимости от того, что первым встретится.

А если у нас кроме [ b] будет еще полсотни тегов, то сколько раз придется парсить текст.

А если еще потребовать, чтобы тег мог иметь неограниченное заранее число атрибутов...
 

ONK

Пассивист PHPСluba
fixxxer, на одних регулярках подобную функциональность не реализовать, конечный автомат понадобится в любом случае.
 

DpoHro

Новичок
Одного не пойму, как назад из html в bbcode перегнать? Не уж то хранить в 2-х экземплярах предложите?
 

WP

^_^
DpoHro
5+... //испадстола.
Конечно в двух для кеширования, или в одном.
 

DpoHro

Новичок
Предполагал, что ответ будет в таком духе, но вот беда, опять не понял ответа...
Если бы не фраза после запятой "или в одном"

Я не сталкивался с bbcode еще =) Каков механизм?

-~{}~ 31.01.07 00:21:

Нужно, чтобы после постинга можно было отредактировать сообщение, ну вобщем как обычно в форумах ...
 

WP

^_^
Объясняю предельно ясно. Есть два варианта. Первый -- храним в БД только BB-код, и при каждом показе преобразуем его в HTML. Второй - храним в БД и ББ-код и HTML полученный после обработки BB-кода. При показе отображаем HTML, а при редактировании ББ-код.
 

boombick

boombick.org
WP
ты гонишь! =) Нах еще и html хранить? Чисто в целях "отдать побыстрей и сэкономить на спичках"?

DpoHro
Ты вообще пробовал класс в работе? Или просто "заранее" спросил?
 
Сверху