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
Форумы портала PHP.SU :: Версия для печати :: Валидация bb кодов
Форумы портала PHP.SU » PHP » Программирование на PHP » Валидация bb кодов

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

1. Zveryugaz - 19 Апреля, 2016 - 16:06:59 - перейти к сообщению
Всем доброго времени суток Друзья!
Столкнулся с такой проблемой - на сайте стоит форма комментирования, в ней можно использовать 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

В общем как то-так.
Заранее спасибо за любую помощь с решением вопроса.
2. kuller - 23 Апреля, 2016 - 22:53:39 - перейти к сообщению
не проще ли просто парсить бб коды которые разрешено использовать... а которые запрещено соотвествено на странице покажутся как текст

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


в том то и дело что в базу записывать нужно уже обработанный текст, так как выводом занимается один обработчик для всех bb кодов
допустим человек захочет установить код величины текста, при выводе он норм отработает( текст увеличится), но в месте где будет выведен текст запрещено устанавливать увеличенный текст.
В данном случае текст записывается для подписи
4. Zveryugaz - 10 Мая, 2016 - 20:38:47 - перейти к сообщению
Как вариант

Проверяемый текст
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 кодах

 

Powered by ExBB FM 1.0 RC1