Сегодня хочу рассказать о том как создать парсер ББ кодов для добавления сообщений на форумах или возможно для комментариев на сайте, тут нам не обойтись без 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. Вот в принципе и всё, что хотел описать здесь, парсер довольно объемного преобразования кода, такого не найдете ни на одном ресурсе. До встречи в следующих постах.