- Подробности
-
Категория: PHP. Строки
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]","<B>",$txt);
Т.е. если Вы используете для отображения текста полужирным шрифтом символы "[B]", Вы должны их заменить на символ "<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]", "<b>", $text);
$text = str_replace("[/b]", "</b>", $text);
$text = str_replace("[i]", "<i>", $text);
$text = str_replace("[/i]", "</i>", $text);
$text = str_replace("[u]", "<u>", $text);
$text = str_replace("[/u]", "</u>", $text);
…
В выше приведенном коде мы заменяем BB-коды на их HTML эквиваленты. Все бы хорошо, да вот только BB-коды бывают и посложнее, например:
color=#FF0000]Красный[/color]
Чтобы перебрать все значения цветов (от #000000 до #FFFFFF), потребуется время, причем если делать эту проверку к каждому документу, то время загрузки документа быстро увеличивается. Как же тогда быть? Да очень просто, внимательнее вчитайтесь в эту функцию: “preg_replace()”.
Кто незнаком с регулярными выражениями, советую прочитать об этом материал.
Разбираем выше написанный код. Создаем два массива $search и $replace. В первом записано регулярное выражение, которое ищется в тексте, а во втором на что нужно заменить соответственно.
http://wackowiki.com/WackoDokumentacija/WackoSintaksis?v=xya