Модний чоловік faq php mode bbcode. Примітки щодо використання BB-кодів (bbCode). Форматування параграфів і областей


Що таке BBCode?   BBCode - це спеціальний варіант HTML. Чи зможете ви використовувати BBCode в ваших повідомленнях чи ні, визначається адміністратором форумів. Крім того, ви зможете відключити використання BBCode у конкретному повідомленні при його розміщенні. Сам BBCode по стилю схожий на HTML, теги укладені в квадратні дужки [і], а не в< и >; він дає більше можливостей управління тим, як виводяться дані. При використанні деяких шаблонів ви зможете додавати BBCode в ваші повідомлення, користуючись простим інтерфейсом, розташованим над полем для введення тексту. Але навіть в цьому випадку дане керівництво може виявитися корисним.

форматування тексту

Як написати жирний, виділений курсивом чи підкреслений   BBCode включає теги для швидкої зміни стилю шрифту, зробити це можна наступними способами:
  • Щоб зробити текст жирним, укладіть його в [B], Наприклад:

    [B]вітаю

    стане вітаю

  • Для підкреслення використовуйте [U], Наприклад:

    [U]добрий ранок

    стане Доброго ранку

  • Курсив робиться тегами [I], Наприклад:

    це [I]здорово!

    видасть Це здорово!

Як змінити колір або розмір тексту   Для зміни кольору або розміру шрифту можуть бути використані наступні теги (остаточний вигляд буде залежати від системи і браузера користувача):
  • Колір тексту можна змінити, оточивши його . Ви можете вказати або відоме ім'я кольору (red, blue, yellow і т. П.), Або шістнадцяткове подання, наприклад #FFFFFF, # 000000. Таким чином, для створення червоного тексту ви можете використовувати:

    Вітаю!

    Вітаю!

    обидва способи дадуть в результаті Привіт!

  • Зміна розміру досягається аналогічним чином при використанні . Цей тег залежить від використовуваних шаблонів, рекомендований формат - число, що показує розмір тексту у відсотках, від 20% (дуже маленький) до 200% (дуже великий) від розміру за замовчуванням. наприклад:

    МАЛЕНЬКИЙ

    швидше за все буде МАЛЕНЬКИЙ

    в той час як:

    ВЕЛИЧЕЗНИЙ!

    буде ВЕЛИЧЕЗНИЙ!

Чи можу я комбінувати теги?   Так, звичайно, можете. Наприклад, для залучення чийогось уваги ви зможете написати:

[B]ПОДИВІТЬСЯ НА МЕНЕ!

що видасть ПОДИВІТЬСЯ НА МЕНЕ!

[B] [u]Це не вірно

Цитування та виведення тексту фіксованої величини

Цитування при відповідях   Є два способи процитувати текст, з посиланням та без.
  • Коли ви використовуєте кнопку «Цитата» для відповіді на повідомлення, то його текст додається в поле введення оточеним блоком . Цей метод дозволить вам цитувати з посиланням на автора або на щось ще, що ви туди впишете. Наприклад, для цитування уривка тексту, написаного Mr. Blobby, ви напишете:

    Текст Mr. Blobby буде тут

    В результаті перед текстом будуть вставлені слова «Mr. Blobby писал (а): ». Пам'ятайте, ви повинні  укласти ім'я в лапки "", вони не можуть бути опущені.

  • Другий метод просто дозволяє вам щось процитувати. Для цього вам треба укласти текст в теги . При перегляді повідомлення буде просто показаний текст в блоці цитування.
Висновок коду або тексту фіксованої   Якщо вам треба вивести шматок програми або щось, що повинно бути виведено шрифтом фіксованої ширини (Courier), ви повинні укласти текст в теги , Наприклад:

echo "This is some code";

Все форматування, що використовується всередині тегів , Буде збережено. Підсвічування синтаксису мови PHP може бути включена за допомогою   і рекомендується при відправці повідомлень з PHP-кодом для поліпшення його удобочитаемости.

створення списків

Створення маркованого списку   BBCode підтримує два види списків: марковані й нумеровані. Вони практично ідентичні своїм еквівалентів з HTML. У маркірованих списках всі елементи виводяться послідовно, кожен відзначається символом-маркером. Для створення маркованого списку використовуйте   і визначте кожен елемент за допомогою [*] . Наприклад, щоб вивести свої улюблені кольори, ви можете використовувати:


[*] червоний
[*] синій
[*] жовтий

Це видасть такий список:

  • червоний
  • синій
  • жовтий
Створення нумерованого списку   Другий тип списку, нумерований, дозволяє вибрати, що саме буде виводитися перед кожним елементом. Для створення нумерованого списку використовуйте   або   для створення алфавітного списку. Як і в разі маркованого списку, елементи визначаються за допомогою [*] . наприклад:


[*] Піти в магазин
[*] Купити новий комп'ютер
[*]

видасть наступне:

  1. Піти в магазин
  2. Купити новий комп'ютер
  3. Вилаяти комп'ютер, коли трапиться помилка
Для алфавітного списку використовуйте:


[*] Перша можлива відповідь
[*] Друга можлива відповідь
[*] Третя можлива відповідь

що видасть

  1. Перша можлива відповідь
  2. Друга можлива відповідь
  3. Третя можлива відповідь

створення посилань

Посилання на інший сайт   В BBCode підтримується кілька способів створення URL "ов.
  • Перший з них використовує тег , Після знака \u003d повинен йти потрібний URL. Наприклад, для посилання на phpBB.com ви могли б використовувати:

    Відвідайте phpBB!

  • Якщо ви хочете, щоб в якості тексту посилання показувався сам URL, ви можете просто зробити наступне:

    http://www.phpbb.com/

  • Крім того, phpBB підтримує можливість, яка називається автоматичні посилання, Це переведе будь-синтаксично правильний URL в посилання без необхідності вказівки тегів і навіть префікса http: //. Наприклад, введення www.phpbb.com в ваше повідомлення призведе до автоматичної видачі www.phpbb.com при перегляді повідомлення.
  • Те ж саме відноситься і до адрес email, ви можете або вказати адресу в явному вигляді:

    [email protected]

    що видасть [email protected], або просто ввести [email protected] в ваше повідомлення, і він буде автоматично перетворено при перегляді.

Як і з усіма іншими тегами BBCode, ви можете укладати в URL "и будь-які інші теги, наприклад   (Див. Наступний пункт), [B]  і т. д. Як і з тегами форматування, правильна вкладеність тегів залежить від вас, наприклад:

http://www.google.com/intl/en_ALL/images/logo.gif

невірно, що може привести до подальшого видалення вашого повідомлення, так що будьте акуратніше.

Вступ

bbCode - Bulletin Board Code, або мова розмітки, яка використовується для форматування повідомлень на багатьох електронних дошках оголошень (BBS) і форумах. Для форматування тексту використовуються теги, подібні тегам HTML. На відміну від тегів HTML, теги bbCode укладають у квадратні дужки. Перед відображенням сторінки движок форуму виробляє розбір тексту і перетворює bbCode в HTML-код.

На багатьох форумах можливість використання BB-кодів встановлюється адміністратором на основі розділ форуму. Тому, перш ніж використовувати BB-коди в повідомленнях, необхідно переконатися, що вони дозволені.

форматування шрифту

Базові теги для роботи з текстом:

[P] Звичайний абзац з відступом.

Абзац, якому можна задавати стиль.
* Тут і далі «стиль» - це аналог style в HTML.
   текст аналогічно в HTML

текст


** З тегами [p] можна використовувати інші теги, такі як [b], [i], [s] і т.д.

Текст, якому за допомогою стилю можна змінювати властивості.

Обмежена область, якої за допомогою стилю можна змінювати властивості (положення, межі, відступи, властивості вмісту і т.д.).
* За замовчуванням кордону областей не видно. На одній сторінці може бути відразу кілька областей.

Форматування тексту:

[B] Важливий текст, напівжирний

[I] Важливий текст, курсив

просто напівжирний

просто курсив

[U] підкреслений текст

[S] Закреслений текст - аналогічно варіанту

зменшений шрифт

Знак виноски зверху або індекс знизу від тексту

віддалений текст

Розміри шрифту:

Шрифт розміром 13 пунктів

Шрифт розміром 15 пунктів

Шрифт розміром 9 пікселів

Шрифт розміром 12 пікселів

Шрифт розміром 15 пікселів

Розмір 0

Розмір +1

Розмір +2

Можливі варіанти розмірів шрифтів (візуальна оцінка) доступні.

заголовки:

Тема 1-го рівня

Тема 2-го рівня

Тема 3-го рівня

Тема 4-го рівня

Тема 5-го рівня

Тема 6-го рівня

Оформлення тексту за допомогою шрифтів:

Шрифт Comic Sans Ms

Шрифт Monotype Corsiva

шрифт Tahoma

Можливі варіанти типів шрифтів (найменування та візуальна оцінка) доступні.

Оформлення тексту за допомогою кольору:

червоний текст
* Можна користуватися стандартними словесними позначеннями кольорів: Red, Green, Blue і т.д.

синій текст
* Цифра # 0000ff означає синій колір в RGB палітрі.

блакитний фон
* У фону теж можна міняти колір.

Синій текст, сірий фон

Деякі зумовлені кольору:

Black White Red Green Blue Purple Firebrick Maroon OrangeRed MidnightBlue CornflowerBlue
Cyan Yellow Magenta DarkGreen DarkGoldenrod Gold Orchid BlueViolet Burlywood PeachPuff

Деякі кольори в шестнадцатиричном коді - інтенсивність червоного, зеленого і синього (RR GG BB):

# 000000 #FFFFFF # FF0000 # 00FF00 # 0000FF # FF00FF # FF4444 # FF9999 #FFCCCC # 9999FF # FF99FF #DDDDDD # FFE4C4 # CCCC99 # FF8DC # FA8072 # 990000 # FF3030 # 000080 # 000066 # 0000CD #AFEEEE # 006400 # 66FF00 # 00B800 # DAA520 # FFCC33 # FFA500 # C71585 # 8B008B # CC33FF

Можливі варіанти палітри кольорів і їх кодів / найменувань доступні.

Вирівнювання тексту та форматування параграфів

Вирівнювання тексту:

Вирівнювання тексту по лівій стороні

Вирівнювання по лівій стороні зі стилем

Вирівнювання в абзаці вліво

Вирівнювання тексту по центру

Вирівнювання по центру зі стилем

Вирівнювання в абзаці по центру

Вирівнювання тексту по правій стороні

Вирівняний по правій стороні зі стилем

Вирівнювання в абзаці справа

Вирівнювання тексту по обидва боки

Вирівнювання по обидва боки зі стилем

Вирівнювання в абзаці по обидва боки
* Вирівнювання текстів по обидва боки відображається для текстів, що мають довжину більше одного рядка.

Оформлення виносок (коментарів) з відступом абзацу:

[Q] Цитата в рядку

Цитата в рядку з властивостями


  Процитований в окремому блоці текст, у якого буде
  невеликий відступ зліва і особливе оформлення (стиль форуму).

приклади:
  Lorem ipsum dolor sit amet
  Lorem ipsum dolor sit amet
  Lorem ipsum dolor sit amet

Форматування параграфів і областей:

Вітаю! У цьому абзаці перше речення буде з "червоної" рядка, тобто з відступом. Прямо як в кнігопечаті. Правда, в Інтернеті це рідкісна практика. Абзаци повинні розділятися просто порожнім проміжком.

  Преформатірований текст зберігає відступи зліва і між словами і встановлює ті відступи, що ви вкажете пробілами. Попередження! Тег робить розриву рядків автоматом!

форматування списків

Використовуємо тег або для маркованих списків:

  • Один з пунктів списку
  • Іншої такої пункт
  • Ще один пункт.



[*] Інший такий пункт
[*] Ще один пункт.

Для пронумерованих списків використовуємо тег:

  1. Один з пунктів списку
  2. Іншої такої пункт
  3. Ще один пункт.


[*] Один з пунктів списку
[*] Інший такий пункт
[*] Ще один пункт.

Закриває тег не обов'язковий для використання:

  • Один з пунктів списку
  • Іншої такої пункт
  • Ще один пункт.


[*] Один з пунктів списку
[*] Інший такий пункт
[*] Ще один пункт.

Також можливе пряме зазначення виду списку:
   - пронумерований список
   - алфавітний список
   - список, пронумерований римськими цифрами

картинки

Http://img.cx/img/primer.jpg - приклад вставки картинки.

Http://img.cx/img/primer.jpg - картинка зліва.

Http://img.cx/img/primer.jpg - картинка праворуч.
* Даний код аналогічний коду в HTML:

Http://img.cx/img/primer.jpg - картинка по центру.
* Даний код аналогічний коду в HTML:

Аналогічні теги з назвами і спливаючі підказки:

Важливо! У назві картинки не можна використовувати лапки!

Http://img.cx/img/primer.jpg - приклад вставки картинки.

Http://img.cx/img/primer.jpg - картинка зліва.

Http://img.cx/img/primer.jpg - картинка праворуч.

Http://img.cx/img/primer.jpg - картинка по центру.

Картинки із зазначеними розмірами:

Http://img.cx/img/primer.jpg - приклад картинки з розміром.
* Даний код аналогічний коду в HTML:

Http://img.cx/img/primer.jpg - картинка зліва, з розміром.

Http://img.cx/img/primer.jpg - картинка праворуч, з розміром.

Вставка великих зображень з смугами прокрутки:

Http: //www..jpg - картинка в виділеної області, якщо вона більше доступного розміру відображення на форумі.

Адреса - відкрити зображення в новому вікні.
* Даний код аналогічний коду в HTML:

Адреса - відкрити зображення в тому ж вікні.
* Даний код аналогічний коду в HTML:

У мене періодично з'являється потреба у використанні «інтерпретатора» BBCode в своїх проектах (написаного на PHP), і постійно немає часу шукати якесь більш-менш легкотравне рішення, що в підсумку виливається в використання або створення «милиць» для кожного конкретного випадку.
  Але ось, схоже, вдалося виявити те, що хотілося.

Моя претензія до подібних готових рішень зазвичай в першу чергу полягає в нездатності цих бібліотек правильно обробляти абзаци. Фактично вони зазвичай взагалі не використовують абзаци (тег P), Натомість в результаті своєї роботи вони просто вставляють тег
, Замінюючи звичайні символи розриву рядків. Я вважаю такий метод емулювання абзаців в 98 відсотках, м'яко кажучи, не доречним. Але так як перенесення рядків за коштами
  набагато легше реалізувати замість «людських»

, Так більшість і робить 🙁 Деякі навіть придумують виправдання, що мовляв з br навіть правильніше, почасти, через подібну ліні розробників різних готових бібліотек, інша частина людей думає, що тег P  є застарілим (адже навіть у багатьох готових продуктах і сайтах абзаци формуються шляхом використання
) 🙂

приступимо

Але, здається, є світло в кінці тунелю. Це готовий клас для роботи з BBCode, який, судячи з усього, відмінно справляється зі своїм завданням (нічого кращого поки не бачив). Єдиний мінус у тому, що документація, представлена \u200b\u200bна сайті, не російською мовою. Цей мінус я і хочу побороти в цій статті, навівши приклад використання класу з російськими коментарями.

Для початку потрібно скачати бібліотеку (на момент написання статті версія бібліотеки була 0.3.3). У викачаному архіві в папці src ви виявите два потрібних нам файлу: stringparser.class.php і stringparser_bbcode.class.php.

Для прикладу припустимо, що у нас є порожній файл «index.php» і поруч з ним ми створимо папку «/ bbcode /», що містить в собі два згаданих вище файлу.
  Для прикладу мінімальне вміст файлу «index.php» має бути таким (запустивши цей приклад можна буде відразу побачити, чи працює бібліотека):

< ?php //Вставляем файл библиотеки require_once "bbcode/stringparser_bbcode.class.php"; //Создаем объект класса StringParser_BBCode $bbcode = new StringParser_BBCode (); //Добавляем объекту класса понятие о тэге [b] //(в итоге только этот тэг и будет //обрабатываться этим классом) $bbcode->addCode ( "b", "simple_replace", , array ( "start_tag" \u003d\u003e " "," End_tag \u200b\u200b"\u003d\u003e"")," Inline ", array (" block "," inline "), array ()); // Обробляємо тестовий рядок і виводимо її в браузер echo $ bbcode-\u003e parse (" Тестовий текст, це слово має бути [b ] жирним ");?\u003e

функція addCode

Найбільший інтерес в цьому коді може викликати, мабуть, функція addCode у об'єкта класу StringParser_BBCode, ось її прототип і список опис параметрів:

Void addCode (string $ code, string $ type, string $ callback, string $ params, string $ content_type, array $ allowed_in, array $ not_allowed_in);

Ця функція додає поняття про ті чи інші кодах (bb-кодах) для об'єкта класу, щоб він міг потім виявити ці коди в тексті і відповідним чином обробити їх. Тобто можна сказати, що спочатку об'єкт класу StringParser_BBCode взагалі нічого не знає про стандартні bb-кодах і не здатний обробити будь-яким чином їх. Тому цей об'єкт потрібно буде після кожної ініціалізації «навчати» всіх різновидів bb-кодів.

$ Code (в прикладі має значення 'b') Код, який потрібно шукати в тексті для обробки. Тобто якщо вказати код test, то потім в оброблюваному тексті буде шукатися тег і оброблятися у відповідності до вказівок в інших параметрах даної функції. $ Type (в прикладі має значення 'simple_replace') Вказівка \u200b\u200bтого, як тег повинен оброблятися (якого він типу). Є різні зумовлені типи тегів, які будуть описані нижче. У нашому ж прикладі зазначений тип 'simple_replace' який вказує на те, що тег буде парним (відкривається тег [b] і закривається) і що ці теги будуть замінені на такі html теги. $ Callback (в прикладі має значення null) Дозволяє вказати ім'я функції, яка повинна буде викликатися при обробці знайденого тега в тексті. У випадку з типом тега 'simple_replace' така функція не викликається, і, відповідно, в цьому параметрі можна вказати null. $ Params (в прикладі має значення array ( 'start_tag' \u003d\u003e ' ',' End_tag \u200b\u200b'\u003d\u003e'')) У цьому параметрі в основному вказується, який потрібно вставляти html тег замість bb тега. Найменування параметрів безпосередньо залежить від того, який тип тега ми вказали в параметрі $ type. $ Content_type (в прикладі має значення 'inline') Тип внутрішнього вмісту тега. Може приймати значення: 'inline', 'block', 'link', 'image'. Якщо я не помиляюся, можна прописувати і свої типи щоб потім можна було вказувати для цього вмісту свої індивідуальні фільтри (приклад використання фільтрів дивіться нижче). $ Allowed_in (в прикладі має значення array ( 'block', 'inline')) У цьому параметрі можна вказати, всередині яких типів об'єктів може перебувати створюваний bb-код (його обробка буде просто ігноруватися в іншому випадку). У нашому прикладі ми вказали, що елемент може перебувати як усередині блокових елементів, так і всередині лінійних. $ Not_allowed_in (в прикладі має значення array ()) Має на принципах, протилежних за змістом попереднього пункту.

Види обробки тегів

Опис варіантів значення параметра $ type в функції addCode.

'Simple_replace' Описує простий парний тег. При використанні цього типу обробки тега в параметрі функції 'params' повинні обов'язково бути присутнім два осередки: $ params [ 'start_tag'] і $ params [ 'end_tag']. 'Start_tag' повинен в собі містити аналог відкривається тега в хтмл, а 'end_tag' - закривається тега відповідно. 'Simple_replace_single' Те ж саме, що 'simple_replace', але використовується тільки для одинарних тегів, які, власне кажучи, не мають вмісту (типу br, hr і т.п.). Вимагає наявності тільки параметра $ params [ 'start_tag']. 'Callback_replace' При цьому типі ви перекладаєте на себе обробку по знайденим збігів (за допомогою своєї callback функції) для парного тега. 'Callback_replace_single' Те ж саме, що і 'callback_replace', але тільки для одинарних тегів. 'Usecontent' Те ж саме що і 'callback_replace', тільки по змісту такого тега інші теги НЕ будуть оброблятися, наприклад, це зручно для тега code. 'Usecontent?' Цей тип може себе вести як 'usecontent' або ж як 'callback_replace' в залежності від ситуації. Актуальність того чи іншого варіанту визначається за рахунок присутності заздалегідь передбачуваного атрибута в bb тегу. Якщо атрибут знайдений, то буде використовуватися обробка 'callback_replace', в іншому випадку тег буде оброблятися як 'usecontent'. Ім'я атрибута для пошуку вказується через параметр $ params [ 'usecontent_param']. Якщо вказано ім'я default, то мається на увазі значення атрибута, присвоєне безпосередньо тегом, наприклад,, значенням атрибута default буде текст «http: // link». Цей прийом часто використовується, наприклад, для тега. Цей тег може використовуватися в двох формах: http://www.example.com/ і Текст посилання, а так же [b] жирний текст. У першому випадку буде використовуватися тип 'usecontent', тому що текст посилання повинен виводитися без будь-якого форматування (і, власне, сама посилання буде некоректна, якщо в ній будуть сторонні символи). В іншому випадку повинен бути використаний тип 'callback_replace', тому що сама посилання передається окремим параметром, а текст, обрамлений на заслання, цілком може містити в собі якесь форматування.
Примітка: Можна вказати кілька параметрів для їх пошуку, для чого в $ params [ 'usecontent_param'] потрібно передати нам не рядок, а масив, що містить рядки. Наприклад: $ bbcode-\u003e addCode (..., array ( 'usecontent_param' \u003d\u003e array ( 'parameter1', 'parameter2')), ...) ;. 'Callback_replace?' Є протилежним варіантом типу 'usecontent?'. Якщо один з атрибутів, зазначених в usecontent_param, зустрічається в тезі, він буде оброблений як 'usecontent', в іншому випадку як 'callback_replace'.

Приклад коду з «бойових» умов

Ось приклад файлу index.php з більш розширеною конфігурацією класу для оброблення більшого числа тегів, в ньому ж і можна зрозуміти, як працюють callback функції і т.п .:

< ?php //Вставляем файл библиотеки require_once "bbcode/stringparser_bbcode.class.php"; //Приводит разнообразные переводы строк //разных операционных систем в единый формат (\n) function convertlinebreaks ($text) { return preg_replace ("/\015\012|\015|\012/", "\n", $text); } //Удалить все символы, кроме переводов строк function bbcode_stripcontents ($text) { return preg_replace ("/[^\n]/", "", $text); } //Функция для обработки ссылок function do_bbcode_url ($action, $attributes, $content, $params, $node_object) { if (!isset ($attributes["default"])) { $url = $content; $text = htmlspecialchars ($content); } else { $url = $attributes["default"]; $text = $content; } //Часть функции, которая занимается //только валидацией данных тэга if ($action == "validate") { if (substr ($url, 0, 5) == "data:" || substr ($url, 0, 5) == "file:" || substr ($url, 0, 11) == "javascript:" || substr ($url, 0, 4) == "jar:") { return false; } return true; } //Непосредственное преобразование тэга в //html вариант с возвращением результата return "". $ Text." ";) // Функція для вставки зображень function do_bbcode_img ($ action, $ attributes, $ content, $ params, $ node_object) (// Частина функції, яка займається // тільки валідацією даних тега if ($ action \u003d\u003d "validate") (if (substr ($ content, 0, 5) \u003d\u003d "data:" || substr ($ content, 0, 5) \u003d\u003d "file:" || substr ($ content, 0 , 11) \u003d\u003d "javascript:" || substr ($ content, 0, 4) \u003d\u003d "jar:") (return false;) return true;) // Безпосереднє перетворення тега в // html варіант з поверненням результату return " ";) // Створюємо об'єкт класу StringParser_BBCode $ bbcode \u003d new StringParser_BBCode (); // Додаємо фільтр (докладніше див. Офф. Документацію), // задіюючи нашу функцію convertlinebreaks, яка буде // перетворювати переклади рядка в тексті до єдиного $ bbcode -\u003e addFilter (STRINGPARSER_FILTER_PRE, "convertlinebreaks"); // Додаємо свої парсери для різних типів об'єктів // (докладніше див. офф. документацію) // Ми вказуємо, через яку функцію має пройти // вміст цих тегів, наприклад, через функцію // htmlspecialchars для запобігання XSS і т.д. $ bbcode-\u003e addParser (array ( "block", "inline", "link", "listitem"), "htmlspecialchars"); $ bbcode-\u003e addParser (array ( " block "," inline "," link ", "Listitem"), "nl2br"); $ bbcode-\u003e addParser ( "list", "bbcode_stripcontents"); // Додаємо bb-код, який використовується у вигляді: // Текст заголовка першого рівня $ bbcode-\u003e addCode ( "h1 "," simple_replace ", , array (" start_tag "\u003d\u003e"

"," End_tag \u200b\u200b"\u003d\u003e"

")," Block ", array (" listitem "," block "," link "), array ()); // Додаємо bb-код, який використовується у вигляді: // Текст заголовка другого рівня $ bbcode-\u003e addCode ( "h2", "simple_replace", , array ( "start_tag" \u003d\u003e "

"," End_tag \u200b\u200b"\u003d\u003e"

")," Block ", array (" listitem "," block "," link "), array ()); // Додаємо bb-код, який використовується у вигляді: // Текст заголовка третього рівня $ bbcode-\u003e addCode ( "h3", "simple_replace", , array ( "start_tag" \u003d\u003e "

"," End_tag \u200b\u200b"\u003d\u003e"

")," Block ", array (" listitem "," block "," link "), array ()); // Додаємо bb-код, який використовується у вигляді: // Текст заголовка четвертого рівня $ bbcode-\u003e addCode ( "h4", "simple_replace", , array ( "start_tag" \u003d\u003e "

"," End_tag \u200b\u200b"\u003d\u003e"

")," Block ", array (" listitem "," block "," link "), array ()); // Додаємо bb-код, який використовується у вигляді: // Текст заголовка п'ятого рівня $ bbcode-\u003e addCode ( "h5", "simple_replace", , array ( "start_tag" \u003d\u003e "
"," End_tag \u200b\u200b"\u003d\u003e"
")," Block ", array (" listitem "," block "," link "), array ()); // Додаємо bb-код, який використовується у вигляді: // Текст заголовка шостого рівня $ bbcode-\u003e addCode ( "h6", "simple_replace", , array ( "start_tag" \u003d\u003e "
"," End_tag \u200b\u200b"\u003d\u003e"
")," Block ", array (" listitem "," block "," link "), array ()); // Встановлюємо прапори для bb-кодів з h1 до h6, // вказуючи, що вони є блоковими елементами, // що буде в подальшому благотворно впливати на розумну // генерацію html коду. Такий елемент, наприклад, не зможе // перебувати всередині інших блочних елементів $ bbcode-\u003e setCodeFlag ( "h1", "paragraph_type", BBCODE_PARAGRAPH_BLOCK_ELEMENT); $ bbcode -\u003e setCodeFlag ( "h2", "paragraph_type", BBCODE_PARAGRAPH_BLOCK_ELEMENT); $ bbcode-\u003e setCodeFlag ( "h3", "paragraph_type", BBCODE_PARAGRAPH_BLOCK_ELEMENT); $ bbcode-\u003e setCodeFlag ( "h4", "paragraph_type", BBCODE_PARAGRAPH_BLOCK_ELEMENT); $ bbcode-\u003e setCodeFlag ( "h5", "paragraph_type", BBCODE_PARAGRAPH_BLOCK_ELEMENT); $ bbcode-\u003e setCodeFlag ( "h6", "paragraph_type", BBCODE_PARAGRAPH_BLOCK_ELEMENT); // Додаємо bb- од [b], який використовується у вигляді: // [b] виділений текст $ bbcode-\u003e addCode ( "b", "simple_replace", , array ( "start_tag" \u003d\u003e " "," End_tag \u200b\u200b"\u003d\u003e"")," Inline ", array (" listitem "," block "," inline "," link "), array ()); // Додаємо bb-код [i], який використовується у вигляді: // [i] курсив $ bbcode-\u003e addCode ( "i", "simple_replace", , array ( "start_tag" \u003d\u003e " "," End_tag \u200b\u200b"\u003d\u003e"")," Inline ", array (" listitem "," block "," inline "," link "), array ()); // Додаємо bb-код, який використовується у вигляді: // http: // www. needsite.domain і // Текст посилання $ bbcode-\u003e addCode ( "url", "usecontent?", "do_bbcode_url", array ( "usecontent_param" \u003d\u003e "default"), "link", array ( "listitem", " block "," inline "), array (" link ")); // Додаємо bb-код, який використовується у вигляді: //http://www.needsite.domain $ bbcode-\u003e addCode (" link "," callback_replace_single "," do_bbcode_url ", array ()," link ", array (" listitem "," block "," inline "), array (" link ")); // Додаємо bb-код, який використовується у вигляді: // http: //www.needsite.domain/img.jpg $ bbcode-\u003e addCode ( "img", "usecontent", "do_bbcode_img", array (), "image", array ( "listitem", "block", " inline "," link "), array ()); // Додаємо bb-код (за змістом те ж саме, // що і), який використовується у вигляді: //http://www.needsite. domain / img.jpg $ bbcode-\u003e addCode ( "bild", "usecontent", "do_bbcode_img", array (), "image", array ( "listitem", "block", "inline", "link"), array ()); // Створюємо групу image з bb-кодів img і bild // для подальшої можливості завдання // деяких правил для цих груп $ bbcode-\u003e setOccurrenceType ( "img", "image"); $ Bbcode-\u003e setOccurrenceType ( "bild", "image"); // Вказуємо, що теги з групи image // можуть зустрічатися (оброблятися) в оглядi не бiльше // двох разів. У нашому випадку це потрібно для того, // щоб користувач не міг вставити більше двох // картинок в текст повідомлення $ bbcode-\u003e setMaxOccurrences ( "image", 2); // Додаємо bb-код $ bbcode-\u003e addCode ( "list", "simple_replace", , array ( "start_tag" \u003d\u003e "
    "," End_tag \u200b\u200b"\u003d\u003e"
")," List ", array (" block "," listitem "), array ()); // Додаємо bb-код [*], вказуючи, що цей тег // може використовуватися тільки усередині тега // з типом list (цей тип ми присвоїли вище тегом) $ bbcode-\u003e addCode ( "*", "simple_replace", , array ( "start_tag" \u003d\u003e "
  • "," End_tag \u200b\u200b"\u003d\u003e"
  • ")," Listitem ", array (" list "), array ()); // Встановлюємо прапори для тегів і [*] // Вказуємо, що для коду [*] закривається тег // не обов'язковий, таким чином, можлива буде // наступна конструкція: // // [*] Item // [*] Item // // Закриваючий тег буде додаватися автоматично // в процесі формування html коду $ bbcode-\u003e setCodeFlag ( "*", "closetag", BBCODE_CLOSETAG_OPTIONAL); // Як я зрозумів, цей прапор позначає, що тег [*] // завжди може бути використаний тільки // на початку нового рядка $ bbcode-\u003e setCodeFlag ( "*", "paragraphs", true); // є блоковим елементом $ bbcode-\u003e setCodeFlag ( "list", "paragraph_type", BBCODE_PARAGRAPH_BLOCK_ELEMENT); // Перед відкривається тегом // символ рядка буде усунутий $ bbcode-\u003e setCodeFlag ( "list", "opentag.before.newline", BBCODE_NEWLINE_DROP); // Перед закривається тегом // символ рядка буде усунутий $ bbcode-\u003e setCodeFlag ( "list", "closetag .before.newline ", BBCODE_NEWLINE_DROP); // у підсумку ми можемо використовувати списки в bb-коді, // використовуючи разом теги list і *: // // [*] Приклад // [*] Приклад // [ *] і т.д. // // Активуємо обробку параграфів $ bbcode-\u003e setRootParagraphHandling (true); // Як я зрозумів, таким чином вказується, // якими символами потрібно замінювати зустрінутий // перенесення рядка всередині абзацу // (по суті, як обробляти порожні абзаци). $ Bbcode-\u003e setParagraphHandlingParameters ( "\\ n", ""); $ Res_text \u003d "Тестовий текст [b] для перевірки роботи класу"; // Про всяк випадок видаляємо всі залишилися // символи розриву рядків у вигляді "\\ r", // якщо такі залишилися в тексті $ res_text \u003d str_replace ( "\\ r", "", $ res_text); // Вуаля! echo $ bbcode-\u003e parse ($ res_text);

    Післямова

    Я, звичайно ж, не зробив повний переклад документації, а тільки найнеобхідніший мінімум, за більш докладною документацією ви можете звернутися на офіційний сайт (взагалі, там описано куди більше різних можливостей).

    Цю бібліотеку також не складає труднощів впровадити в будь-якої php фреймворк, я, наприклад, з успіхом проробляв це для cackePHP.

    Якщо ви теж зустрічали подібні бібліотеки (коректно працюють з абзаців! 🙂), цікаво було б дізнатися про них.

    вступ

    Що таке BBCode? BBCode - це спеціальна реалізація мови HTML, що надає більш зручні можливості для форматування тексту. Можливість використання BBCode у повідомленнях визначається адміністратором форуму. Крім цього, BBCode може бути відключений вами в будь-який час в будь-якому розміщується повідомленні прямо з форми його написання. Сам BBCode по стилю дуже схожий на HTML, теги заключаються в квадратні дужки [...], а не в< … >. При використанні деяких шаблонів ви зможете додавати BBCode в повідомлення, користуючись простим інтерфейсом, розташованим над полем для введення тексту. Але навіть в цьому випадку читання даного керівництва може виявитися вам корисним.

    форматування тексту

    Як написати жирний, курсив або підкреслення?   BBCode включає теги для швидкої зміни стилю основного тексту. Зробити це можна наступними способами:
    • Щоб зробити текст жирним, укладіть його в теги [B]. приклад:

      [B]вітаю

      видасть вітаю

    • Для підкреслення використовуйте теги [U]. приклад:

      [U]добрий ранок

      видасть Доброго ранку

    • Курсив робиться тегами [I]. приклад:

      це [I]здорово!

      видасть Це здорово!

    Як змінити колір або розмір тексту?   Для зміни кольору або розміру шрифту можуть бути використані наступні теги (остаточний вигляд буде залежати від системи і браузера користувача):
    • Колір тексту можна змінити, оточивши його тегами . Ви можете вказати або відоме ім'я кольору (red, blue, yellow і т.п.), або його шістнадцяткове подання (#FFFFFF, # 000000 і т.п.). Таким чином, для створення червоного тексту ви можете використовувати:

      Вітаю!

      Вітаю!

      Обидва способи дадуть в результаті Привіт!

    • Зміна розміру досягається аналогічним чином при використанні тега . Цей тег залежить від використовуваних шаблонів, але рекомендованим форматом є числове значення, що показує розмір тексту у відсотках, починаючи від 20 (дуже маленький) до 200 (дуже великий) від розміру за замовчуванням. приклад:

      ДРІБНИЙ

      швидше за все видасть ДРІБНИЙ

      в той час як:

      ДУЖЕ ВЕЛИКИЙ!

      видасть ДУЖЕ ВЕЛИКИЙ!

    Чи можна комбінувати теги форматування?   Так звичайно можна. Наприклад, для залучення уваги ви можете написати:

    [B]ПОДИВІТЬСЯ НА МЕНЕ!

    що видасть ПОДИВІТЬСЯ НА МЕНЕ!

    [B] [u]Такий запис є некоректною

    Цитування та виведення тексту фіксованої величини

    Цитування тексту в відповідях   Є два способи цитування текстів: з зазначенням автора і без вказівки.
    • При використанні кнопки «Цитата» для відповіді на повідомлення, текст повідомлення додається в поле для введення тексту, оточений тегами . Цей метод дозволяє цитувати з посиланням на автора, або на щось ще, що ви впишете в лапках. Наприклад, для цитування фрагмента тексту, написаного автором Mr. Blobby, введіть:

      Сюди введіть текст від Mr. Blobby

      В результаті перед вашим відповіддю на повідомлення буде вставлений текст «Mr. Blobby писал (а): ». Пам'ятайте, необхідно  укласти ім'я в лапки ( ""), вони не можуть бути опущені.

    • Другий метод просто дозволяє вам процитувати що-небудь. Для цього помістіть текст між тегами . При перегляді повідомлення цей текст буде знаходитися в блоці цитування.
    Висновок коду або тексту фіксованої   Якщо вам треба вивести частину коду програми або ще що-небудь, що має бути відображено шрифтом фіксованої ширини (Courier), то укладіть текст в теги . приклад:

    echo "Це код програми";

    Все форматування, що використовується всередині тегів , Буде збережено. Підсвічування синтаксису коду PHP можна зробити за допомогою тега   і рекомендується при розміщенні повідомлень, що містять фрагменти кодів PHP.

    створення списків

    Створення маркованого списку   BBCode підтримує два види списків: марковані й нумеровані. Вони практично ідентичні своїм еквівалентів з HTML. У маркірованих списках всі елементи виводяться послідовно, кожен відзначається символом-маркером. Для створення маркованого списку використовуйте теги   і визначайте кожен елемент списку за допомогою [*] . Наприклад, для виведення своїх улюблених квітів ви можете використовувати:


    [*] червоний
    [*] синій
    [*] жовтий

    Це видасть такий список:

    • червоний
    • синій
    • жовтий
    Створення нумерованого списку   Другий тип списку - нумерований, дозволяє вибрати, що саме буде виводитися перед кожним елементом. Для створення нумерованого списку використовуйте теги , або   для створення алфавітного списку. Як і в разі маркованого списку, елементи списку визначаються за допомогою [*] . приклад:


    [*] Піти в магазин
    [*] Купити новий комп'ютер
    [*]

    видасть наступне:

    1. Піти в магазин
    2. Купити новий комп'ютер
    3. Вилаяти комп'ютер, коли трапиться помилка
    Для алфавітного списку використовуйте наступне:


    [*] Перша можлива відповідь
    [*] Друга можлива відповідь
    [*] Третя можлива відповідь

    що видасть

    1. Перша можлива відповідь
    2. Друга можлива відповідь
    3. Третя можлива відповідь

    створення посилань

    Посилання на інший сайт   phpBB підтримує декілька способів створення посилань, також відомих під назвою URL.
    Як і з усіма іншими тегами BBCode, ви можете укладати в посилання будь-які інші теги. наприклад,   (Див. Наступний пункт), [B] і т.п. Як і з тегами форматування, правильна вкладеність тегів залежить від вас. Наприклад такий запис:

    http://www.teosofia.ru/my-picture.gif

    не є коректною, що може привести до подальшого видалення вашого повідомлення. Будьте уважнішими.