Ну, он работает сейчас просто - ищет кратчайшие выражения вида [b](нет последовательности вида[/b])[/b] и заменяет их на теги. Никакого анализа контекста и вложенности не производится, поэтому, например,
Код:
[b]111[b]222[/b][/b]
выглядит как "
111[b]222[/b]". На одиночный [b] он просто никак не реагирует.
Теперь чем хуже таблицы. Скажем, я, когда писал сообщение на форум, указал только BBCode [td][/td], забыв вложить его в [table] и [tr]:
Код:
123[td]456[/td]789
Движок это честно преобразует в HTML-код вида
Код:
123<td>456</td>789
А вот теперь начинаются проблемы.
Сообщения на форуме выводятся как ячейки (<td></td>) некоторой общей таблицы.
Когда в середине этой ячейки браузер видит команду открытия новой ячейки (это уже пошел наш "вредоносный" код сообщения), он
автоматически закрывает текущую и начинает новую правее. Затем закрывается и эта ячейка, и продолжается код сообщения. Поскольку он не заключен уже в ячейку, браузер выпихивает его
наверх всей таблицы. Для примера - посмотрите на
http://grafline.com.ua/temp/test.html и сравните с исходным кодом
Код:
<table border="1"><tr>
<td>
123
<td>54545</td>
678
</td>
</tr></table>
Поэтому если вводить BBcode для таблиц, то его обработчик нехорошо будет просто механически "допилить напильником", добавив пару новых распознаваемых последовательностей. Придется таки анализировать уровни вложенности выражений и их допустимость.