developing.name Решение проблем разработки сайтов. uncat php javascript jquery ajax html other C#

Обработка своих 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
);


Результатом на все это безобразие будет:

<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);

preg_replace_callback передает _my_replace совпадения указанные в паттерне, и наша функция уже делает с этими данными простое сравнение.

Как раз выдавая тот результат, который был представлен в начале статьи:

<div class="block" style="width:200; color:#FF0000;">BBCODE</div>

Ссылки по теме:

  • 09.12.2008 - Обработка своих bbcode тэгов
  •  

    Комментарии

    Нет

     

    Имя*:
    e-mail*:
    URL:
    captcha*
    Текст*:
    • 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

    jQuery plugins:
    • pro.scroll v0.3 - графический скролл для div
    • pro.sres v0.1 - подсказки при поиске
    • pro.tips v0.2 - всплывающие подсказки
    • pro.tube v0.1 - работа с YouTube ссылками
    Powered by PRO