За последние 24 часа нас посетили 22223 программиста и 1029 роботов. Сейчас ищут 676 программистов ...

Парсер BBCODE - пишем правильно

Тема в разделе "Прочие вопросы по PHP", создана пользователем artoodetoo, 25 дек 2012.

  1. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    Это предложение по совместной разработке. Попробуем прямо в этой теме всё зафигачить. Если вы хорошо знаете PHP — помогайте.

    Идеального парсера сообщений для форума наверное не бывает. Но давайте сделаем просто хороший.
    Предлагаю такой сценарий:
    - определяем минимальный набор тегов, озвучиваем известные "подводные камни";
    - описываем интерфес будущего класса для парсера;
    - выкладываем тестовую оболочку, которая использует парсер оговоренного интерфейса;
    - тестируем, замеряем, ищем дыры. и так до победы.
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    мозговой штурм:
    bb теги бывают:
    -простые, только с содержимым, без атрибутов [ b ]{B_TEXT}[ /b ]
    -сложные, с атрибутами и содержимым [ img={img_URL} ]{img_TITLE}[ /img ] ....
    -вложенные, одни внутри других [ b ] text [ u ] text [ /u ]text [ /b ]

    простые(если даже они вложенные) можно обработать простым str_replace(), быстро и просто.
    сложные придется парсить с пом. Регулярок например. вложенные тоже вроде не проблема.

    проблемы могут быть с некорректно закрытыми, или непарными тегами. такие думаю нет смысла обрабатывать а просто удалять.
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    дело усложняется тегом [ code ]. внутри него текст никак не обрабатывается. прежде чем делать str_replace или preg_replace придется расчленить текст на фрагменты внутри code и снаружи code.

    непарные теги либо автоматически исправлять, либо сигналить "есть ошибка" и не давать сохранить. мне кажется удалять будет негуманно. пользователь скорее всего незаметит и опубликует не то, что хотел. помоему обнаружить и просигналить будет лучше всего.

    сейчас оболочку для тестов выложу…
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    а если я хочу именно опубликовать кусок кода и ВЫДЕЛИТЬ в нем жирным или красным какойто проблемный кусок?
    думаю что внутри него тоже нужно обрабатывать, хотябы часть тегов
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    а ты попробуй на паре разных форумов. afaik, внутри code ты не можешь сам ничего стилизовать.

    Добавлено спустя 38 секунд:
    Код (Text):
    1. ололо [b]пыщпыщ[/b]
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    а смысл тогда заморачиваться? если в итоге хотим получить еще один унылый парсер. такойже как и в других форумах )
     
  7. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Мужики, я с вами, я буду обеспечивать моральную поддержку! ) (это все на что я способен, инача наш парсер будет работать 2 часа и сделает 100500 запросов в БД )
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    runcore, ну мы можем всё обсудить ) можно попробовать разные варианты.

    считаю, что выделение внутри code это плохо, потому что тогда невозможно будет привести пример кода с упоминанием тегов. типа:
    или придется ввести новый тег, не code, который будет работать как сейчас code ))) маразм не правда ли?

    Добавлено спустя 10 минут 34 секунды:
    Вот тестовая среда:
    http://dl.dropbox.com/u/11837706/bbcode1.zip
    страничка с формой ввода. текст никуда не сохраняется, смотрим только "предпросмотр" — так и надо для теста.
    тестовый класс с вложенными тегами пока не справляется. думаю почитать про рекурсивные паттерны и победить!
    тег code особым образом не отрабатывается пока.

    налетайте, улучшайте!
     
  9. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    Да.ненадо чтобы в code обрабатывались доп ббкоды.
    Естевственно мы храним в базе 2 варианта текста:с бб кодами и переведённый в хтмл.
    Поле с бб кодами нам необходимо для редактирования.
    Давайте теперь кто то начало начнёт писать, а я вечером всунусь ибо убегаю =)
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    есть же родной пхп ббкод парсер
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    что не так?
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    если ты имел в виду pear bbcode, то меня смущает, что движки форумов его просто игнорируют. а гугль по фразе "use pear bbcode" находит аж 7 ссылок. ошеломительный успех для "стандартной" библиотеки.
    но я честно попробую, уже инсталировал.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Я думаю они просто не используют его ибо не везде есть.
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    дык, там где нет было бы несложно добавить просто в виде php файла. он доступен. казалось бы…
    ну не будем огульно хаять. я испытаю и доложу. пока мне это не кажется охерительной идеей.
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Почему?
     
  17. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    проверил в пхп 5.2.6 - непашет.
    там регулярки невидят именованные группы. как я понял.
    плюс там надо уменьшить жадность в регулярке для <inside>
    ...

    Добавлено спустя 10 минут 42 секунды:
    для URL надо </{$tag}> заменить на </a>
     
  18. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    ага, спасибо! а почему ты до сих пор на 5.2? некоторые провайдеры уже на 5.4 клиентов переводят.
     
  19. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    я стараюсь писать так чтоб работало везде. новые фишки внедряю когда без них уже никак.
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    igordata, viewtopic.php?f=5&t=43097
    заставить парсер понимать переводы строк сложнее, чем кажется на первый взгляд. Нельзя тупо воткнуть nl2br(), надо учитывать случаи UL, OL и CODE, а это уже не вписывается в его универсальный и настраиваемый механизм.
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    не убедил =)
     
  22. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Присоединяюсь к тем, кто спрашивает...
    А чем вас, изобретателей велосипедов, не устраивает встроенный модуль "BBCode — Bulletin Board Code"?

    п.с. "Изобретатель велосипедов" не национальность, а состояние души (с) не мой
    (я тоже "изобретатель" - у меня есть свой парсер /для справки/)
     
  23. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    Встроенный куда? Форумов 100500 и у всех разные парсеры.
    Если сюда, на этот форум, то не устраивает чуть менее чем полностью. Например тем как он работает со ссылками.
    Это мода такая спрашивать про "велосипеды". Кагбэ намекае на собственную осведомленность в вопросе, да? В таком случае покажи свой велосипед, обещаю, что не буду смеяться. За остальных не поручусь.

    Добавлено спустя 7 минут 10 секунд:
    О ссылках, кстати. Не только местный, очень многие форумы варварски режут ссылку если в ней встретилась кириллица. Но другие портят хотябы "неоформленные" ссылки", а php.ru портит даже те, которые засунуты в [ url ].

    Добавлено спустя 8 минут 29 секунд:
    igordata, мне даже не жаль ))) каждый имеет то, что заслужил.
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Вот чо чо а этот форум мы могли бы причесать.
     
  25. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    ну а зачем флуд развёл? подключайся