1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

BB-коды

Тема в разделе 'PHP', создана пользователем mr.Slink, 8 май 2010.

  1. TopicStarter Overlay

    mr.Slink Пользователи

    Сообщения:
    261
    Лайки:
    92
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    odoRemasrered
    Страна:
    Russian Federation Russian Federation

    BB-коды
    Сразу оговорюсь, что лучше сделать функцию, которая будет проверять текст на BB-коды и выдавать его пользователю. Т.е. лучше хранить данные на сервере с BB-кодами, чем с HTML. Хоть времени на выдачу документа будет тратится немного больше, зато вы в любое время сможете изменить стиль для того или иногоBB-кода. И для этого не нужно будет перебирать и изменять все документы, а только одну строчку в коде.
    Для начала я Вас познакомлю с двумя функциями:


    str_replace()

    Синтаксис:

    string str_replace(string from, string to, string str)
    Функция str_replace() заменяет в исходной строке str одни подстроки на другие. Т.е. функция заменяет в строке str все вхождения подстроки from на to и возвращает результат. Эта функция может работать с двоичными строками.

    Функция, вообще говоря, нужная. К примеру, если Вы пишите что-то типа гостевой книги, форума, и хотите, чтобы в форме ввода для выделения теста можно было пользоваться стандартными тегами HTML, Вы можете с помощью этой функции заменить символы, которые Вы выбрали для форматирования на стандартные теги НТML.
    К примеру:

    $txt = str_replace("","<B>",$txt);

    Т.е. если Вы используете для отображения текста полужирным шрифтом символы "", Вы должны их заменить на символ "<B>", используемые в НТМL.


    preg_replace()

    Синтаксис:

    mixed preg_replace (mixed pattern, mixed replacement, mixed subject [,int limit])
    Эта функция ищет в строке subject соответствия регулярному выражению pattern, и заменяет их на replacement. Необязательного параметр limit задает число соответствий, которые надо заменить. Если этот параметр не указан, или равен -1, то заменяются все найденные соответствия.

    <?
    $str = "May 15, 2003";
    $pattern = "/(\w+) (\d+), (\d+)/i";
    $replacement = "1 \${1} \$3";
    print
    preg_replace($pattern, $replacement, $str);
    ?>
    Результат:

    1 May 2003
    Думаю с функцией str_replace() все понятно, поэтому мы можем сразу перейти к написанию первой части нашей программы:

    $text = str_replace("", "<b>", $text);
    $text = str_replace("
    ", "</b>", $text);

    $text = str_replace("", "<i>", $text);
    $text = str_replace("
    ", "</i>", $text);

    $text = str_replace("", "<u>", $text);
    $text = str_replace("
    ", "</u>", $text);
    ...
    В выше приведенном коде мы заменяем BB-коды на их HTML эквиваленты. Все бы хорошо, да вот только BB-коды бывают и посложнее, например:

    color=#FF0000]Красный[/color]​
    Чтобы перебрать все значения цветов (от #000000 до #FFFFFF), потребуется время, причем если делать эту проверку к каждому документу, то время загрузки документа быстро увеличивается. Как же тогда быть? Да очень просто, внимательнее вчитайтесь в эту функцию: “preg_replace()”.
    Кто незнаком с регулярными выражениями, советую прочитать об этом материал.

    $search[] = "#\[color=\# ([a-f0-9]{6})\](.*?)\[/color\]#si";
    $search[] = "#\[size=([1-6]{1})\](.*?)\[/size\]#si";

    $search[] = "#\[email\]([a-z0-9\._-]{1,})+@([a-z0-9\._-]{1,})+\.([a-z]{2,4})\[/email\]#si";
    $search[] = "#\{1,})+@([a-z0-9\”_-]{1,})+\”([a-z]{2,4})\”\](.*?)\[/email\]#si";
    ...

    $replace[] = '<font color="#\1">\2</font>';
    $replace[] = '<font size="\1">\2</font>';

    $replace[] = '<a href="mailto://\1@\2.\3">\1@\2.\3</a>';
    $replace[] = '<a href="mailto:\1@\2.\3">\4</a>';
    ...

    $text = preg_replace($search, $replace, $text);

    Разбираем выше написанный код. Создаем два массива $search и $replace. В первом записано регулярное выражение, которое ищется в тексте, а во втором на что нужно заменить соответственно.

    Я думаю идея понятна, так что сможете сами сделать для своего сайта любые коды, причем не только BB, но можете еще придумать и свои. Или воспользоваться вот этими:
    http://wackowiki.com/WackoDokumentacija/WackoSintaksis?v=xya
  2. TopicStarter Overlay

    mr.Slink Пользователи

    Сообщения:
    261
    Лайки:
    92
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    odoRemasrered
    Страна:
    Russian Federation Russian Federation
    Думаю теперь вам будет легче сделать bbкоды
    p.s. Я както сам додумался до ББ кодов а только после создания их полез в инет искать инфу по второй части этой докуменации
  3. TopicStarter Overlay

    mr.Slink Пользователи

    Сообщения:
    261
    Лайки:
    92
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    odoRemasrered
    Страна:
    Russian Federation Russian Federation
    простейший редактор bb кодов

    Совсем недавно во время работы над очередным проектом мне понадобился простенький редактор bb кодов.
    Немного подумав и поискав по гуглу, я написал свой, наверное проще уже некуда… Редактор требует для работы подключенной библиотеки Jquery.
    Публикую его здесь, может кому нибудь пригодится.
    HTML код редактора выглядит следующим образом:
    Код:
    <div class="bb_bar">
    <a href="#" alt="b">Жирный</a>
    <a href="#" alt="i">Курсив</a>
    <a href="#" alt="u">Подчеркнутый</a>
    <a href="#" alt='a[href=""]'>Ссылка</a>
    </div>
    <textarea id="user_text"></textarea>
    Естественно возможно любое количество сылок, кнопочек. то как они будут оформлены, зависит исключительно от Вашей фантазии CSS в помощь.
    Ниже привожу Javascript код. Который отвечает за обработку нажатия на кнопки вставки тегов.
    Код:
    <script>
    $(document).ready(function(){
    $('.bb_bar a').click(function() {
    var button_id = attribs = $(this).attr("alt");
    button_id = button_id.replace(/\[.*\]/, '');
    if (/\[.*\]/.test(attribs)) { attribs = attribs.replace(/.*\[(.*)\]/, ' $1'); } else attribs = '';
    var start = '['+button_id+attribs+']';
    var end = '[/'+button_id+']';
    insert(start, end);
    return false;
    });
    });
    function insert(start, end) {
    element = document.getElementById('user_text');
    if (document.selection) {
    element.focus();
    sel = document.selection.createRange();
    sel.text = start + sel.text + end;
    } else if (element.selectionStart || element.selectionStart == '0') {
    element.focus();
    var startPos = element.selectionStart;
    var endPos = element.selectionEnd;
    element.value = element.value.substring(0, startPos) + start + element.value.substring(startPos, endPos) + end + element.value.substring(endPos, element.value.length);
    } else {
    element.value += start + end;
    }
    }
    </script>
Черновик сохранён Черновик удалён

Поделиться этой страницей