Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

Показать HTML | Показать BBCode

PHP-библиотека xBB 0.29 для работы с BBCode

Общие сведения

xBB - написанная на PHP библиотека для работы с BBCode, которая является развитием библиотеки, описанной здесь.
 
SVN-репозиторий библиотеки находится по адресу svn://svn.prolib.ru:3692.
Активное обсуждение вопросов, связанных с xBB можно найти на форумах PHP Club.
 
xBB может быть использован в гостевых книгах, форумах, на досках объявлений и т.п. На сайте http://www.pc.uz поддержка BBCode в пользовательских комментариях реализована с помощью xBB. Данная документация целиком сверстана в BBCode и конвертирована в XHTML с помощью xBB.
 
Парсер реализован несколько отлично от аналогов. Обычно такие парсеры реализуются с помощью регулярных выражений. Этот же использует метод конечных автоматов. Имеет следующий плюс: как бы ни была богата и продвинута коллекция тегов, поддерживаемая в данной реализации, скорость обработки текстов будет постоянной, так как осуществляется за фиксированное число проходов. Коллекцию поддерживаемых тегов можно увеличивать до бесконечности, а скрипт будет выполняться одинаково быстро. Скорость его работы зависит только от величины текста и от числа тегов, используемых в конкретном тексте, но не от числа всех возможных тегов и вариантов их написания. Скрипт не парсит текст многократно для каждого тега или варианта написания тега.
 
xBB версии 0.29 поддерживает 134 тега, "автоматические ссылки", 100 смайлов. Коллекция тегов и смайлов легко расширяема.
 
Теги имеют следующие особенности:
  1. Названия тегов и атрибутов не зависят от регистра. Например, [font=Arial size=+1], [FONT=Arial SIZE=+1] и [FoNt=Arial SiZe=+1] - равнозначно.
     
  2. Значения атрибутов могут быть закавычены "так" и 'так', либо никак не закавычены. Следующие конструкции равнозначны: [google="BBCode"], [google='BBCode'], [google=BBCode]. Следующие конструкции НЕ равнозначны: [google="Поддержка BBCode"], [google=Поддержка BBCode]. Последний вариант будет интерпретирован скриптом как [google="Поддержка" bbcode=""].
     
  3. Теги могут быть вложенными. Но те из них, которые создают элементы блочного типа (такие как [h1] или [table]), не могут быть вложены в строчные теги (такие как [i] или [color]). Строчные элементы закрываются, если начинается блочный. Эти ограничения обусловлены требованиями W3C.
     
  4. Теги должны быть правильно вложены. Неправильный код "[b][i]текст[/b][/i]" будет интерпретирован скриптом как "[b][i]текст[/i][/b][/i]". Это ограничение также обусловлено требованием W3C.
     
  5. В данной реализации BBCode поддерживаются закрывающие теги вида [/]. Такой тег закрывает последний незакрытый тег. Например, [b]текст[/b] равнозначно [b]текст[/]. Тем не менее рекомендую пользоваться именно первой формой написания. Attention Тогда, в случае нагромождения вложенных тегов, вам будет легче ориентроваться в коде. Кроме того, первая форма написания позволяет скрипту более корректно обрабатывать пользовательские ошибки.
     
  6. Поддерживается закрытие тега способом [тег /]. Например, конструкции [url name=top][/url] и [url name=top /] равнозначны.
     
  7. В некоторых случаях можно не писать закрывающий тег. Например, тег [tr] (строка таблицы), будет автоматически закрыт, как только встретится очередной [tr] или закрывающий тег [/table]. Тег [hr] вообще не имеет закрывающего, интерпретируется скриптом как [hr/]. О поведении конкретных тегов смотрите их описания.
     
  8. При конвертации ББКода в HTML сохраняется форматирование пробелами. Т.е. все двойные пробелы переводятся в '&nbsp;&nbsp;', все переводы строк заменяются на '<br />'. Однако вокруг некоторых элементов (таких как [h1]) игнорируются 1-2 перевода строк, так как эти элементы сами по себе создают дополнительные отступы. Это сделано для того, чтобы по возможности приблизить визуальное представление HTML к исходному ББкоду.

xBB поддерживает мнемонизацию специальных символов. Например, чтобы вывести на печать [b] без преобразования в HTML, можно ввести @l;b@r;. Поддерживаются мнемоники следующих спецсимволов:
  1. Открывающая квадратная скобка '[' может быть мнемонизирована как '@l;'.
     
  2. Закрывающая квадратная скобка ']' может быть мнемонизирована как '@r;'.
     
  3. Двойная кавычка '"' может быть мнемонизирована как '@q;'.
     
  4. Одинарная кавычка "'" (апостроф) может быть мнемонизирована как '@a;'.
     
  5. Знак собачки '@' может быть мнемонизирован как '@at;'.

Поддержка "автоматических ссылок" означает, что строки вида "http://какойто_uri", "https://какойто_uri", "ftp://какойто_uri", "svn://какойто_uri" и т.п., а также "www.какойто_uri" и "ящик@домен" автоматически конвертируются в соответствующие гиперссылки. Этого не происходит для содержимого таких тегов как [code], [nobb] и аналогичных. Автоматические ссылки могут быть отключены. Как это делается - смотрите раздел API.
 
О задании собственных наборов смайликов - смотрите разделы "Быстрый старт" и "API".
 
Теги, поддержка которых реализована в xBB по умолчанию, перечислены в разделе "Список тегов".
 
О том, как создать свой тег или переопределить существующий, читайте на странице "Как создать тег".

Благодарности

Должен выразить глубокую признательность людям, помогавшим мне в работе над библиотекой, и людям, чьим трудом я воспользовался при создании библиотеки:
  • Большое спасибо разработчикам редактора TinyMCE из Moxiecode Systems AB. Я использовал их идеи для переделки тулбара в xBBEditor-е для xBB версии 0.29. А также заимствовал несколько кнопок.
     
  • Дмитрий Котеров (http://dklab.ru) - разработчик библиотеки JsHttpRequest, которую я использовал в xBBEditor-е для xBB версии 0.28.
     
  • Александр Пальчиков (ZigFreeD) - специально для xBB написал код JavaScript для редактирования BBCode в textarea. Этот код был использован в xBBEditor-е. Отдельное спасибо за активное тестирование и исправление найденных багов.
     
  • Nigel McNie (http://qbnz.com/highlighter) - разработчик библиотеки GeSHi, которую я использовал для создания тегов подсветки синтаксиса. Кроме того, я использовал дизайн документации GeSHi для оформления документации xBB. Благо Nigel McNie разрешает это делать.
     
  • Дмитрий Золотарев (Whirlwind - http://www.prolib.ru) - спасибо за идеи, помощь в продвижении и SVN-репозитарий.
     
  • Виталий Фиоктистов (VITUS - http://www.pc.uz) - придумал название "xBB" и нарисовал соответствующий логотип. Также спасибо за идеи и помощь в продвижении.
     
  • Алесандр Михайлов - подготовил коллекцию смайликов для phpBB (2005), которой я воспользовался включив в пакет xBB.

Также огромное спасибо всему коллективу и посетителям сайта http://www.pc.uz, участникам форума http://phpclub.ru, другим людям, оказавшим помощь своими замечаниями, предложениями, моральной поддержкой.

Последнее редактирование: 2011-02-20 03:26:51

Метки материала: xbb, bbcode, теги, php, html, парсер, xhtml, bb-code


68 комментариев

13.08.2007 18:59:32 #
Неизвестный браузер Гость Dmi3x
Блин, всё отлично работает... но эта красиваф форма на JS рабоает только в IE Not so
В опере эта форма вообще даже нормально не отображается It is surprised
Видать придётся кнопки самому делать Eyes in a heap
13.08.2007 19:19:05 #
Неизвестный браузер dima
У меня в Опере 9.20 все нормально отбражается и кнопки работают. Really? Какая у вас версия? В 8-ой однозначно не будет работать.
14.08.2007 13:56:22 #
Неизвестный браузер Гость Dmi3x
Г, ну у меня как раз 8.5 )
Я конечно не силён в JS, но брал вот отсюда: ( http://forum.vingrad.ru/forum/topic-35775.html)  - скрипт для вставки текста в textarea и он у меня работал и в 8й Опере... хотя и не полностью, но работал Oops!
Блин, жалко что такая фигня с этими браузерами...
 
А вобщем, огромное спасибо за либу! абалденная штука!
14.08.2007 14:52:34 #
Неизвестный браузер dima
Спасибо на добром слове.
 
xBB может работать с любым редактором. Если у вас есть свой, лучше использовать именно его. Well
 
xBBEditor - вещь экспериментальная. Я попытался реализовать в нем подсветку синтаксиса BBCode. А это требует
 
Javascript
document.designMode = 'on';

который поддерживается в Опере только с 9-й версии.
18.08.2007 19:34:32 #
Неизвестный браузер Гость Сергей
Отличная библиотека, спасибо! ))) Один вопрос: можно ли сделать так, чтобы автоматически заключать в тэг параграфа все "пустые" строки, т.е. строки, не имеющие bb-кода?
18.08.2007 21:02:39 #
Неизвестный браузер dima
Тоже думал об этом. Причем в более универсальном ключе. Так, чтобы в <p> заключались все куски текста, которые должны заключаться в него по смыслу.
 
Но это оказалось несколько сложнее, чем сначало представлялось. Проблема в том, что нельзя просто взять в <p> куски текста, разделенные пустыми строками, это может привести к невалидному (с точки зрения W3C) коду. Например, в таком случае:
 
text 1
[center]text 2[/center]
text 3

 
Можно, конечно, пытаться учесть все такие случаи. Но это требует громоздкого кода. Хотелось бы чего покрасивше Well Идеи уже есть. Думаю, что в следующей версии это будет сделано.
30.09.2007 01:18:09 #
Opera Гость Smile
Доброго времени суток. Библиотека конечно не плохо реализована. Но выполняется очень уж долго. У меня на форуме к примеру при 30 вызовах (30 постов на страницу), скрипт выполнился за 11 секунд. А это совсем не гуд. Причём ббкоды были даже не во всех постах. Интересно, а как подобное выполняется в том же Vbulletin за 1 секунду? ;)
30.09.2007 23:32:25 #
Mozilla Firefox dima
1 секунда - тоже чересчур много. На xBB.uz большие и сложные тексты BBCode отдаются посетителю практически мгновенно Well (уж незнаю, как принимаются Not so)
 
Все дело - в кэшировании. Нет смысла генерировать один и тот же текст каждый раз, как его запросят.
 
Но даже и без кэширования 12 сек. - это чересчур. Приведите, пожалуйста, характеристики вашего сервера и код, который выводит посты.
01.10.2007 09:50:13 #
Internet Explorer Гость Sukhov
Угу. У меня тоже на форуме стоит. гогда на странице 30-50 постов, то и без кеширования уходят десятки милисекунд, но не как не секунды.
01.10.2007 15:07:40 #
Opera Гость Jon
А подскажите плиз как в текст можно вставить исходный текс, т.е. в текст добавить скажем свой <div class="aaaa"><h3>лялля</h3></div>

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2012, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.