Это предложение по совместной разработке. Попробуем прямо в этой теме всё зафигачить. Если вы хорошо знаете PHP — помогайте. Идеального парсера сообщений для форума наверное не бывает. Но давайте сделаем просто хороший. Предлагаю такой сценарий: - определяем минимальный набор тегов, озвучиваем известные "подводные камни"; - описываем интерфес будущего класса для парсера; - выкладываем тестовую оболочку, которая использует парсер оговоренного интерфейса; - тестируем, замеряем, ищем дыры. и так до победы.
мозговой штурм: bb теги бывают: -простые, только с содержимым, без атрибутов [ b ]{B_TEXT}[ /b ] -сложные, с атрибутами и содержимым [ img={img_URL} ]{img_TITLE}[ /img ] .... -вложенные, одни внутри других [ b ] text [ u ] text [ /u ]text [ /b ] простые(если даже они вложенные) можно обработать простым str_replace(), быстро и просто. сложные придется парсить с пом. Регулярок например. вложенные тоже вроде не проблема. проблемы могут быть с некорректно закрытыми, или непарными тегами. такие думаю нет смысла обрабатывать а просто удалять.
дело усложняется тегом [ code ]. внутри него текст никак не обрабатывается. прежде чем делать str_replace или preg_replace придется расчленить текст на фрагменты внутри code и снаружи code. непарные теги либо автоматически исправлять, либо сигналить "есть ошибка" и не давать сохранить. мне кажется удалять будет негуманно. пользователь скорее всего незаметит и опубликует не то, что хотел. помоему обнаружить и просигналить будет лучше всего. сейчас оболочку для тестов выложу…
а если я хочу именно опубликовать кусок кода и ВЫДЕЛИТЬ в нем жирным или красным какойто проблемный кусок? думаю что внутри него тоже нужно обрабатывать, хотябы часть тегов
а ты попробуй на паре разных форумов. afaik, внутри code ты не можешь сам ничего стилизовать. Добавлено спустя 38 секунд: Код (Text): ололо [b]пыщпыщ[/b]
а смысл тогда заморачиваться? если в итоге хотим получить еще один унылый парсер. такойже как и в других форумах )
Мужики, я с вами, я буду обеспечивать моральную поддержку! ) (это все на что я способен, инача наш парсер будет работать 2 часа и сделает 100500 запросов в БД )
runcore, ну мы можем всё обсудить ) можно попробовать разные варианты. считаю, что выделение внутри code это плохо, потому что тогда невозможно будет привести пример кода с упоминанием тегов. типа: или придется ввести новый тег, не code, который будет работать как сейчас code ))) маразм не правда ли? Добавлено спустя 10 минут 34 секунды: Вот тестовая среда: http://dl.dropbox.com/u/11837706/bbcode1.zip страничка с формой ввода. текст никуда не сохраняется, смотрим только "предпросмотр" — так и надо для теста. тестовый класс с вложенными тегами пока не справляется. думаю почитать про рекурсивные паттерны и победить! тег code особым образом не отрабатывается пока. налетайте, улучшайте!
Да.ненадо чтобы в code обрабатывались доп ббкоды. Естевственно мы храним в базе 2 варианта текста:с бб кодами и переведённый в хтмл. Поле с бб кодами нам необходимо для редактирования. Давайте теперь кто то начало начнёт писать, а я вечером всунусь ибо убегаю =)
если ты имел в виду pear bbcode, то меня смущает, что движки форумов его просто игнорируют. а гугль по фразе "use pear bbcode" находит аж 7 ссылок. ошеломительный успех для "стандартной" библиотеки. но я честно попробую, уже инсталировал.
дык, там где нет было бы несложно добавить просто в виде php файла. он доступен. казалось бы… ну не будем огульно хаять. я испытаю и доложу. пока мне это не кажется охерительной идеей.
проверил в пхп 5.2.6 - непашет. там регулярки невидят именованные группы. как я понял. плюс там надо уменьшить жадность в регулярке для <inside> ... Добавлено спустя 10 минут 42 секунды: для URL надо </{$tag}> заменить на </a>
igordata, viewtopic.php?f=5&t=43097 заставить парсер понимать переводы строк сложнее, чем кажется на первый взгляд. Нельзя тупо воткнуть nl2br(), надо учитывать случаи UL, OL и CODE, а это уже не вписывается в его универсальный и настраиваемый механизм.
Присоединяюсь к тем, кто спрашивает... А чем вас, изобретателей велосипедов, не устраивает встроенный модуль "BBCode — Bulletin Board Code"? п.с. "Изобретатель велосипедов" не национальность, а состояние души (с) не мой (я тоже "изобретатель" - у меня есть свой парсер /для справки/)
Встроенный куда? Форумов 100500 и у всех разные парсеры. Если сюда, на этот форум, то не устраивает чуть менее чем полностью. Например тем как он работает со ссылками. Это мода такая спрашивать про "велосипеды". Кагбэ намекае на собственную осведомленность в вопросе, да? В таком случае покажи свой велосипед, обещаю, что не буду смеяться. За остальных не поручусь. Добавлено спустя 7 минут 10 секунд: О ссылках, кстати. Не только местный, очень многие форумы варварски режут ссылку если в ней встретилась кириллица. Но другие портят хотябы "неоформленные" ссылки", а php.ru портит даже те, которые засунуты в [ url ]. Добавлено спустя 8 минут 29 секунд: igordata, мне даже не жаль ))) каждый имеет то, что заслужил.