Предлагаю на рассмотрение мой bb-code парсер http://ra.cm-soft.ru/demo База тэгов bb-code'ов хранится в mysql. Часть кодов, содержащих достаточно сложные конструкции прописывается дополнительной функцией в php. (Пока в этом нуждалась только подсветка php-кода) Поддержка стилей и атрибутов: align, color, background-color, padding и др.
Так к чему пришли же? Конечными автоматами валить их, и если фанарёвая функциональность то можно и реплайсами, а чё посложнее - калашами валим да? (PS: Все забыли еще один очень нехороший, очень карявый и малонадежный вариант - JavaScript)
kostyl Можно вариантом, когда идёт простые теги путём str_replace, сложные регулярками. Я обычно так делаю. Но самое правильное - конечный автомат, т.к. если нужны сложные вложенности и.т.д., подругому особо и не обработаешь. А ещё лучше обрабатывать и HTML и BBcode в одном парсере - универсально и полезно
Rederick Asher Скорость работы, универсальность. Не все проекты работаю с базами данных, и уж точно MySQL не единственная.
флоппик По-твоему это не разумно? В любом случае, скрипт берёт базу тэгов из mysql и переводит её в array. Что бы не пользоваться mysql, можно этот путь устранить, а всю базу хранить изначально в array'ях.
kostyl Если сделать корректную админку, то можно через неё редактировать базу тэгов и возможности бб-парсера.
kostyl Ну делал-то я скрипт для себя, а у меня в планах было написать сайт полностью управляемый через админку без всяких заходов через фтп. Что касается других, то всегда можно отказаться от хранения базы тэгов в mysql
Rederick Asher, а array записанный в файле /conf/bbcodes.php нельзя что ли редактировать через админку?
Rederick Asher можно сделать веб-морду. Забить побольше тегов изначально, потом их только включать-выключать через одминку.
В любом случае. здесь основное - движок, который может работая с баззой тегов корректно их заменят в тексте. Поддерживаются классы, стили, и пр. При этом стили поддерживаются не все подрят, а только те, что указаны в базе (см ссылку: http://ra.cm-soft.ru/demo ).
Посоветуйте плиз, как сделать подсветку синтаксиса если я встречаю bb код [c#] [/c#], если допустим есть класс BBCoder и в нем есть метод, типа: PHP: <?php public function GetHTML($sIn) { $this->_sOut = ''; $this->_sIn = $sIn; $iCount = strlen($this->_sIn); for ($i = 0; $i < $iCount; $i++) { $this->_FSM->GoStep(substr($this->_sIn, $i, 1)); } $this->_CheckCloseBB(); return $this->_sOut; } Тоесть выходной поток наращивается по символьно, а если встречается bb код, через списки автозамены он заменяется на код html, только вот не пойму, как сделать подсветку синтаксиса, надо типа начинать накапливать, да?, если встретился открывающийся bb код [c#] а когда встретиться закрывающийся через какуюнить preg_* функцию(кстате какую, если у меня есть база лексем в массиве) обрамить как то, и все это прибавить к выходному потоку?