Обработка своих bbcode тэгов
09.12.2008, 02:09Рубрика: php
Не всегда стандартного набора bbcode тегов достаточно для нужд администратора и пользователей. Поэтому приходит время создать свои тэги, и в этом помогают preg_replace и preg_replace_callback. Функции очень похожи, но только preg_replace_callback передает управление, на обработку совпадений, пользовательской функции. Обо всем по порядку, в простых примерах.
Допустим в определенных местах текста, нам нужно вставить слой: со своим классом; размером по высоте и ширине; цветом шрифта и фона. Например:
<div class="block" style="width:200; color:#FF0000;">BBCODE</div>
Утомительное занятие, да и пользователям нельзя давать возможность вставлять html тэги. На уме bbcode:
[layer width=200 color=#FF0000]BBCODE[/layer]
А в php замена будет так:
$s = preg_replace(
"/\[layer( width=([0-9]+))?( height=([0-9]+))?( bgcolor=(#[A-Za-z0-9]+))?( color=(#[A-Za-z0-9]+))?\](.*?)\[\/layer\]/si",
'<div class="block" style="width:\\2; height:\\4; background-color:\\6; color:\\8;">\\9</div>',
$s
);
"/\[layer( width=([0-9]+))?( height=([0-9]+))?( bgcolor=(#[A-Za-z0-9]+))?( color=(#[A-Za-z0-9]+))?\](.*?)\[\/layer\]/si",
'<div class="block" style="width:\\2; height:\\4; background-color:\\6; color:\\8;">\\9</div>',
$s
);
Результатом на все это безобразие будет:
<div class="block" style="width:200; height:; background-color:; color:#FF0000;">BBCODE</div>
Сразу бросается в глаза height и background-color, они остаются пустыми, так как в параметрах [layer] не указаны. Но это и правильно, ведь возможности preg_replace не безграничны. И если вас это не устраивает, то тут уже и приходит на помощь preg_replace_callback:
function _my_replace($matches)
{
return '<div class ="block" style="'.($matches[2]!=""?'width:'.$matches[2].'; ':'').
($matches[4]!=""?'height:'.$matches[4].'; ':'').
($matches[6]!=""?'background-color:'.$matches[6].'; ':'').
($matches[8]!=""?'color:'.$matches[8].';':'').'">'.$matches[9].'</div>';
}
$s = preg_replace_callback("/\[layer( width=([0-9]+))?( height=([0-9]+))?( bgcolor=(#[A-Za-z0-9]+))?( color=(#[A-Za-z0-9]+))?\](.*?)\[\/layer\]/si", '_my_replace', $s);
{
return '<div class ="block" style="'.($matches[2]!=""?'width:'.$matches[2].'; ':'').
($matches[4]!=""?'height:'.$matches[4].'; ':'').
($matches[6]!=""?'background-color:'.$matches[6].'; ':'').
($matches[8]!=""?'color:'.$matches[8].';':'').'">'.$matches[9].'</div>';
}
$s = preg_replace_callback("/\[layer( width=([0-9]+))?( height=([0-9]+))?( bgcolor=(#[A-Za-z0-9]+))?( color=(#[A-Za-z0-9]+))?\](.*?)\[\/layer\]/si", '_my_replace', $s);
preg_replace_callback передает _my_replace совпадения указанные в паттерне, и наша функция уже делает с этими данными простое сравнение.
Как раз выдавая тот результат, который был представлен в начале статьи:
<div class="block" style="width:200; color:#FF0000;">BBCODE</div>
Ссылки по теме:
Нет
- bbcode теги
- preg_replace bbcode
- jquery bbcode
- bbcode цвета
- обработка bbcode
- функции BBCode
- php bbcode
- bbcode php
- php обработка bbcode
- BBcode фон
- обработка bb тегов
- bbcode цвет фона
- тэги bbcode
- bbcode preg_replace
- создание BBCode
- BBCODE
- замена bbcode
- bbcode цвет
- Обработчик BBCode
- теги bbcode
- bbcode тэги
- preg_replace теги
- обработка bbcode php
- php preg_replace bbcode
- свой bbcode
- создать bbcode
- функциям BBCODE
- php заменить теги
- замена тегов php
- php preg_replace замена ссылок
- jquery замена тегов
- php bbcode class
- php BBcode preg_replace
- bbcode color
- php обработка тегов
- BBCode
- bbcode name
- BBCode [name]
- фон в bbcode
- bbcode jquery
- обработчик bb
- bbcode Обработка
- bbcode php class
- php свои теги
- php bbcodes
- php замена тегов
- preg_replace bbcode url
- bbcode class
- цвета bbcode
- вставить html bbcode