Парсер BBCode на PHP

XPOMOB

Новичок
http://xbb.uz/docs/properties.bb
Свойство tags удаляет только заранее определенный тег. Точнее он его не удаляет, а просто не обрабатывает! (а хотелось бы удалить ВСЕ коды, кроме разрешенных). Тег все же выводится на экран, только без обработки (а мне хочется, что бы не выводился вообще, т.к. если я запрещаю тег img - то все равно пользователь видит название картинки).



И ещё: Хотелось бы организовать цепочку $текст_с запрешенными_тегами -> обработка -> $bb_code_текст_но_уже_без_ запрещенных_тегов

$bb_code_текст_но_уже_без_ запрещенных_тегов - со строкой соответственно можно делать все что угодно - записать в базу или отдать парсеру, для преобразования в html.
 

tashkentchi

Новичок
Можете удалить все теги кроме разрешенных в конфиге.

Можете создать класс - обработчик тега, который не делает ничего. И назначить его (через свойство tags) тем тегам, которые должны "удаляться".
 

XPOMOB

Новичок
а как быть с неизвестным тегами? если какой-то злой юзер применит тег [hhh]текст[/hhh]?

И ещё мне не очень хочется сильно модифицировать xbb - много мороки будет с выходом новых версий xbb.

-~{}~ 03.06.10 23:33:

А может мою проблему можно решить при помощи регулярных выражений?

"!\[[^(teg1|color|i)]*\].*\[\/[^(teg1|color|i)]*\]!Uis"

Я не очень в них разбираюсь, но вот это регулярное выражение по идеи должно удаляет все теги кроме teg1 color i, но не удаляет. Оставляет вариант t и при этом почему-то оставляет trr. Соответственно у меня вопрос: как teg1 сделать последовательностью символов, а не набором?

-~{}~ 03.06.10 23:37:

"Оставляет вариант t и при этом почему-то оставляет trr."

понимать как "Оставляет вариант t, trr и тп."
 

Вурдалак

Продвинутый новичок
Автор оригинала: XPOMOB
а как быть с неизвестным тегами? если какой-то злой юзер применит тег [hhh]текст[/hhh]?
— и что?

-~{}~ 03.06.10 23:45:

Вот ты сейчас, как «злой юзер», «применил» этот тег. Что такого плохого случилось?

-~{}~ 03.06.10 23:48:

Автор оригинала: XPOMOB
Соответственно у меня вопрос: как teg1 сделать последовательностью символов, а не набором?
— да никак по сути. Не тот инструмент.
 

XPOMOB

Новичок
Выйдет новая версия парсера, который будет поддерживать этот тег - и возможно появится проблема, да и что всякий хлам хранить (ну и ещё наверное можно что-то придумать)...


Ну и мне все же ну очень хочется все лишнее удалить :) и чистый текст с разрешенными тегами отдать на растерзание парсеру (а парсер при этом не трогать).

Автор оригинала: Вурдалак

— да никак по сути. Не тот инструмент.
странно, что это не возможно... А какой инструмент посоветуете?
 

Вурдалак

Продвинутый новичок
Автор оригинала: XPOMOB
Выйдет новая версия парсера, который будет поддерживать этот тег - и возможно появится проблема, да и что всякий хлам хранить (ну и ещё наверное можно что-то придумать)...
— в каком смысле? Список тегов, насколько я понимаю, не зависит от версии: он зависит от того существует ли класс для данного тега или нет. Хлам или не хлам — это сообщение пользователя. Если пользователь напишет просьбу:
Добавьте, пожалуйста, тег [video], как на таком-то форуме
А на выходе получит какую-то х..ю — это нормально?

-~{}~ 04.06.10 00:12:

Автор оригинала: XPOMOB
странно, что это не возможно... А какой инструмент посоветуете?
— в принципе, вот такое убожество возможно на PCRE:
PHP:
$fuckedS = preg_replace('#\\[/?(?!tag1|tag2|tag3)[a-z0-9]+.*?\\]#', '', $s);
 

XPOMOB

Новичок
Если один пользователь напишет разрешенный ему тег [video=imy_rolika], а другому запрещено просматривать тег [video], то этот пользователь всеравно увидит название ролика (если этот тег просто запретить в настройках парсера).


А на выходе получит какую-то х..ю — это нормально?
Да, нормально, т.к. применит тег [ no bb code] [/] и получит желаемый результат.

Автор оригинала: Вурдалак
— в принципе, вот такое убожество возможно на PCRE:
PHP:
$fuckedS = preg_replace('#\\[/?(?!tag1|tag2|tag3)[a-z0-9]+.*?\\]#', '', $s);
почему убожество?

И можно вас попросить модифицировать это выражение, что бы он удалял не только сам тег, но и его содержимое (для тегов типа [тег]содержимое тега[/тег])
 

Вурдалак

Продвинутый новичок
Автор оригинала: XPOMOB
Если один пользователь напишет разрешенный ему тег [video=imy_rolika], а другому запрещено просматривать тег [video], то этот пользователь всеравно увидит название ролика (если этот тег просто запретить в настройках парсера).
— а почему бы не написать корректный обработчик тега [video]? То есть если пользователь аноним, то возвращать надпись а-ля «Данное содержимое доступно только зарегистрированным пользователям». xBB же такое вполне позволяет?

-~{}~ 04.06.10 00:54:

Модифицировать не буду, т.к. считаю, что данное решение не имеет право на существование :)
 

XPOMOB

Новичок
Автор оригинала: Вурдалак
— а почему бы не написать корректный обработчик тега [video]? То есть если пользователь аноним, то возвращать надпись а-ля «Данное содержимое доступно только зарегистрированным пользователям». xBB же такое вполне позволяет?
Мне же не только тег [video] мешает. Придется переписывать ВСЕ теги (а их много... и при выходе новой версии переписывать ещё раз, а потом ещё и ещё при выходе новых версий парсера).

И как быть если пользователю разрешено просматривать видео, но запрещено его добавлять? Т.е. при добавлении в базу нужно удалить из текста все запрещенные для этого пользователя теги. Как их удалить?
 

kostyl

Новичок
Я вот тут решил сравнить со своим парсером. Да у хбб работает в пять раз быстрее, но никак не могу понять как настроить utf-8 ?
 

MirDj

Новичок
Смотрю и эта ветка уже заброшена... надеюсь на чудо и пишу сюда... Знает ли кто-нибудь, как передать парсеру свои данные? пробовал
$bb = new bbcode;
$bb->thisComments = '1';
мне нужно в файле обработки видео в классе
class Xbb_Tags_Video extends bbcode
{
public $behaviour = 'img';
function get_html($tree = null)
{

}

}

Получить переменную, чтобы в зависимости от того какое её значение , разным образом обрабатывать данные.
Если есть кто живой и знает как сделать - подскажите пожалуйста
 
Сверху