Язык
Контакты
GitHub
Поддержка
Регистрация
Войти
Логин: Пароль: Запомнить:
Пользователи
Голосование

    Какую CMS Вы предпочитаете

    AtomX
    Fapos CMS
    Drunya CMS
Последние комментарии
Автор: чайник, в новости:

Что такое API и для чего они нужны

Автор: HIshnik, в новости:

Классы в PHP для чайников

Автор: Аноним, в новости:

Написание простого вируса в блокноте

Автор: stream, в новости:

Создаем BB коды на PHP

Автор: boriska, в новости:

Релиз Atom-M CMS 4

Автор: 0leg, в новости:

Релиз Atom-M CMS 4

Топ пользователей
Drunya
Репутация: 108
Сообщений: 3531
Сашка_из_Шебекино
Репутация: 87
Сообщений: 1803
boriska
Репутация: 65
Сообщений: 846
ARMI
Репутация: 46
Сообщений: 1859
BAH0
Репутация: 26
Сообщений: 544
Для начала давай выясним что такое bb код. это нечто что позволяет превратить [url ]http://fapos.net[/url] в <a href="http://fapos.net">http://fapos.net</a>. По сути BB коды это просто замена одного текста на другой по определенным правилам.

А теперь давай вспомним какая функция в PHP позволяет делать нам такие замены. Конечно же preg_replace(). Она работает по аналогии с str_replace, только принимает в качестве первого параметра, то есть что менять, регулярное выражение. Круто да? Вот как можно реализовать приведенный в начале пример BB кода при помощи этой функции

 1 
 2 
<?php $message preg_replace("#\[url\](http:\/\/[\w-_\.]*\.{1}\w{2,}[\w-_\/\.\?=]*)\[\/url\]#isU"'<a href="\\1"">\\1</a>'$message);
//метки \\1 обозначают совпавшую часть шаблона, то есть то что было в круглых скобках. В нашем случае это url?>

или пример создания более простого BB кода
 1 
 2 
<?php $message preg_replace("#\[b\](.*)\[\/b\]#isU"'<b>\\1</b>'$message);?>
так же стоит обратить что слеш(/) и квадратные скобки([]) экранируются, так как это управляющие символы в регулярных выражениях и для того чтобы они в шаблоне означали сами себя их надо экранировать.

Вот и все что касается части преобразования, дальше уже на что вам хватит фантазии. Помните, что через подобные преобразования надо прогонять только ту информацию в которой они должны работать, такая инфа как заголовки обычно не проходит такие преобразования.

Безопасность
следует помнить что BB коды как правило приводят к появлению уязвимостей по-этому чтобы свести риск на минимум перед преобразованиями прогоняйте весь текст через квотящие функции, они не затронут квадратные скобки, то есть BB коды, но сведут на нет попытки взлома через BB коды. А так как сами бб коды будут преобразованы в HTML после, с ними все будет хорошо и они будут коректно работать. Примером такой "квотящей" функции может стать htmlspecialchars();


Клиентская часть
Клиентская часть BB кодов это та часть которую использует пользователь, чтобы их вставить. конечно ее может и не быть - пользователи могут просто писать их руками и все, но это не совсем удобно. Клиентская часть должна состоять как минимум из текстового поля куда будет вводиться информация и кнопок. Сами кнопки для работы используют JavaScript. Вот простой пример клиентской части
Code:
<script type="text/javascript">
function bb(tag) {
    var myform = document.getElementById('text');
    myform.value += '[' + tag + ']';
}
</script>

<input type="button" value="B" onClick="bb('b')" />
<textarea id="text"></textarea>

ну вот текстовое поле и кнопка с маркировкой "B" по нажатии на которую в поле подставится "[b]". Это самый простой пример, конечно еще надо сделать проверку открыт ли тег и если открыт ставить закрывающий а не открывающий, и прикрутить работу сразу по выделеному участку текста. Но это уже я оставлю на ваше усмотрение, в крайнем случае пишите на форуме если остались вопросы:)
Создаем BB коды на PHP

Теги: Создание BB; bb коды на javascript; работа с регулярными выражениями;
Источник: Drunya
Автор: Drunya
Категория: PHP
Просмотров: 10381
Комментариев: 5

Комментарии
  • User avatar

    stream

    +100500
    Дата отправления: 23 Мар 2015
  • User avatar

    lol

    =)
    Дата отправления: 11 Июл 2014
  • User avatar

    alex

    Спасибо. Это то что мне было нужно и сам я долб...Ёб до этого не догадался. Супер. :idea:
    Дата отправления: 18 Окт 2013
  • User avatar

    Скад

    Опиши, пожалуйста, более подробно. Где проводить замену и как. А то я не понял
    Дата отправления: 4 Авг 2011
  • User avatar

    Drunya

    Лучше на форуме спрашивать.
    А так вообще document.getElementById('ИД') позволяет получить тебе элемент с определенным идишником и затем уже проводить с ним манипуляции, например менять его содержимое или стили и т.д. Это я думаю и есть ключ
    Дата отправления: 4 Авг 2011
Сейчас online: 13. Зарегистрированных: 2. Гостей: 11.
-->