Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Валидация bb кодов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Работа с bb кодами php
Zveryugaz
Отправлено: 19 Апреля, 2016 - 16:06:59
Post Id



Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Всем доброго времени суток Друзья!
Столкнулся с такой проблемой - на сайте стоит форма комментирования, в ней можно использовать bb коды, проблема в том, что некоторые пользователи используют запрещенные коды. Все мои попытки найти функцию которая бы работала с валидацией bb кодов не принесли результатов (неделю искал, перерыл весь инет), после попробовал сам написать, но к сожалению не совсем разобрался с работой регулярных выражений regexp, да и велосипед изобретать не очень хочется.
Код который я писал, прошу не пинать Улыбка

Функция проверки текста
PHP:
скопировать код в буфер обмена
  1.  
  2. function BBvalidation($str, $PatentBB, $IllicitBB ){
  3.         $str = preg_replace("/\[(\/?)\]/is", "", $str);//Удаляет пустышки
  4.         $str = preg_replace ($PatentBB, $IllicitBB, $str);
  5.     return $str;
  6. }
  7.  
  8. //Создаю два массива с доступными BB кодами и подменой для них
  9. $arrPatentBB = array(
  10.         "/\[b\](.*?)\[b\/\]/is"
  11. );
  12. $arrIllicitBB = array(
  13.         '[b]$1[/b]',
  14. );
  15.  
  16. //Пример входящих данных
  17. $str = 'текст 1 [CENTER][B] текст 2 [/B][/CENTER][size=3] текст 3 [/size][EMAIL="email"] [][][][/] текст 4';
  18.  
  19. //Ну и выводим все это дело
  20. echo BBvalidation($str, $arrPatentBB, $arrIllicitBB );
  21.  
  22. /* Результат
  23. текст 1 [CENTER][B] текст 2 [/B][/CENTER][size=3] текст 3 [/size][EMAIL="email"] текст 4
  24. */
  25.  
  26.  


Часть кода удалилась но все равно остались запрещенные теги и не закрытый


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

В общем как то-так.
Заранее спасибо за любую помощь с решением вопроса.

(Отредактировано автором: 19 Апреля, 2016 - 21:23:04)

 
 Top
kuller
Отправлено: 23 Апреля, 2016 - 22:53:39
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




не проще ли просто парсить бб коды которые разрешено использовать... а которые запрещено соотвествено на странице покажутся как текст

PHP:
скопировать код в буфер обмена
  1.  
  2. function bbcode($text)
  3. {
  4.         $text = preg_replace('/\[(\/?)(center|b)\s*\]/', "<$1$2>", $text);
  5.        
  6.         return $text;
  7. }
  8.  
 
 Top
Zveryugaz
Отправлено: 10 Мая, 2016 - 18:10:38
Post Id



Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




kuller пишет:
не проще ли просто парсить бб коды которые разрешено использовать... а которые запрещено соотвествено на странице покажутся как текст


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

(Отредактировано автором: 10 Мая, 2016 - 18:14:24)

 
 Top
Zveryugaz
Отправлено: 10 Мая, 2016 - 20:38:47
Post Id



Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Как вариант

Проверяемый текст
PHP:
скопировать код в буфер обмена
  1.  
  2. $text = 'текст 1 [center]текст 2[/center] [center][B] текст 2 [/B][/center][size=3] текст 3 [/size][right]текст 3[/right][EMAIL="email"] [][q][][/] текст 4 [color=#ff3333]5555[/color] [b] текст 2 [/b]';
  3.  


сначала разбиваем текст
PHP:
скопировать код в буфер обмена
  1.  
  2. preg_match_all("(\[(/|)([a-z]+)(|=(.*?))\]([^\[\]]*))iu",$text,$d2,PREG_SET_ORDER);
  3.  


Создаем массив с разрешенными кодами
PHP:
скопировать код в буфер обмена
  1.  
  2. $bbcode=['','center','left','right','b','url'];
  3.  


потом в цикле проверяем все bb коды
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($d2 as $val){
  3.         if(!array_search(mb_strtolower($val[2]),$bbcode)){
  4.                 exit('Есть запрещенные bb коды');
  5.         }
  6. }
  7. exit('Запрещенные bb коды отсутствуют');
  8.  

(Добавление)
В любом случае придется модерировать, но по крайней мере можно не беспокоиться о запрещенных bb кодах
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB