PHP

Создание парсера BB кода для формы добавления сообщений, комментариев

Сегодня хочу рассказать о том как создать парсер ББ кодов для добавления сообщений на форумах или возможно для комментариев на сайте, тут нам не обойтись без PHP. Покажу на примере массива. И так приступим, что нам для этого надо, обязательно надо обдумать, какой код будим добавлять на форму, какой код разрешать, и как его реализовать. Первое что надо сделать создать отдельный класс например так и назовём его (class SimpleBB) В классе опишим метод например (remake). Что же из этого выйдет давайте посмотрим. Пример реализации BB кодов, если кому много будет лишние можно убрать.

Код PHP
class SimpleBB {

  function remake($text) {

  $text = htmlspecialchars($text);

  $search = array(
1 => '[u]',
2 => '
',
3 => '', 4 => '',
5 => '', 6 => '',
7 => '
',
8 => '
',
9 => '
',
10 => '
',
11 => '
',
12 => '
',
13 => '
',
14 => '
',
15 => '
',
16 => '
',
17 => '
',
18 => '
',
19 => '
',
20 => '
',
21 => '
',
22 => '
',
23 => '
',
24 => '
',
25 => '
',
26 => '
',
27 => '', 28 => '',
29 => '
',
30 => '
',
31 => '[/COLOR]',
32 => '[/цитата]',
33 => '[/QUOTE]',
34 => '[/quote]',
35 => '
',
36 => '[SPOILER]',
37 => '
',
38 => '', 39 => '',
40 => '
',
41 => '
',
42 => '
',
43 => '
',
44 => '[цитата:]'
);[/PHP]
Вывше вы видите массив с набором ББ кодов следовательно нам надо их както обработать и вывести в html правильно вы и подумали, получается информация добавляется в базу данных в формате бб кода, а выводится на странице в html, как это сделать? Делаем следующий шаг к этому коду ниже добавляем например обработку BB кода в HTML,

Код PHP
$replace = array(1 => '<span style="text-decoration: underline;">',
2 => '</span>',
3 => '<em>',
4 => '</em>',
5 => '<strong>',
6 => '</strong>',
7 => '<span style="font-family: Verdana, Arial, Helvetica, sans-serif; letter-spacing: 2px; word-spacing: 3px; font-size: 13px; font-weight: bold; font-style: italic; color: #333399; font-variant: small-caps; height: 12px; padding-left: 9pt; padding-right: 6pt; vertical-align: middle; display: block;">',
8 => '</span>',
9 => '<div style="width: 80%; overflow: auto; text-align: left; display: block; padding-left: 20px;  padding-right: 5px;"><strong>Код:</strong><pre><code style="white-space: pre;">',
10 => "\n</code></pre></div>",
11 => '<blockquote>',
12 => '</blockquote>',
13 => '<span style="margin-left: 30px; font-style: italic; display: block;">',
14 => '</span>',
15 => '<span style="font-variant: small-caps;">',
16 => '</span>',
17 => '<span style="font-size: 22px;">',
18 => '</span>',
19 => '<span style="font-size: 10px;">',
20 => '</span>',
21 => '<tt>',
22 => '</tt>',
23 => '<sub>',
24 => '</sub>',
25 => '<sup>',
26 => '</sup>',
27 => '<strong>',
28 => '</strong>',
29 => '<div style="width: 80%; overflow: auto; text-align: left; display: block; padding-left: 20px;  padding-right: 5px; position:relative;"><strong>Код:</strong><pre><code>',
30 => "\n</code></pre></div>",
31 => '</font>',
32 => "</div>",
33 => "</div>",
34 => "</div>",
35 => "<div class='quote'><b>Цитата: $username</b><br />",
36 => "<div class='bb_tag_spoiler'>
  <div class='spoiler_title'>
  <strong>Спойлер</strong>
  <input style='margin-left:10px' type='button' onclick=\"$(this).parent('div').parent('div').find('.spoiler_body').slideToggle();  \" value='Развернуть/свернуть'\"/>
  </div>
  <div class='spoiler_body' style='display:none'>",
37 => "</div></div>",
38 => "<em>",
39 => '</em>',
40 => '<div class="bb_tag_audio"><object type="application/x-shockwave-flash" data="/images/bbcode/dewplayer-vol.swf" width="240" height="20" id="dewplayer-vol>
  <param name="movie" value="/images/bbcode/dewplayer-vol.swf"></param>
  <param name="bgcolor" value="#5E9F6C"></param>
  <param name="FlashVars" value="mp3=',
  41 => '"></param>
  </object></div>',
  42 => '<iframe width="420" height="315" src="http://www.youtube.com/embed/',
  43 => '" frameborder="0" allowfullscreen></iframe>',
  44 => "<div class='quote'><b>Цитата: $username</b><br />"
  );

Обратите внимание что каждый массив отвечает номеру бб кода, можно было номера и не ставить, но для наглядности, получилось так, да и на будущее вдруг запутаишся куда чего прописывал, а так глянул номер бб кода, соответственно под этим же номером и преобразование в html код. Удобно? Но это простой вариант, можно и другими способами, не обязательно делать именно так как я вам здесь предлагаю. И на конец надо всю переработку преобразование представить в нормальном виде делаем значит следующее:
$text = str_replace($search, $replace, $text);

Здесь мы помещаем все массивы в переменную текст и обрабатываем вывод в html коде. На сегодня пока достаточно пищи для размышления в следующей статье будим подключать класс к форме, сделаем добавление BB кодов на javascript. Вот в принципе и всё, что хотел описать здесь, парсер довольно объемного преобразования кода, такого не найдете ни на одном ресурсе. До встречи в следующих постах.
Добавлено: 27 Августа 2013 11:14:19 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...