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]   

> Без описания
Microteam
Отправлено: 06 Декабря, 2011 - 18:25:56
Post Id



Гость


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


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




Наверное у многих на сайте попадались, такие умельцы которые не закрывали бб-коды, или закрывали неоткрытые. Хм

Многие решали проблему так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $input = "Текст с незакрытым[b] бб-кодом";
  3. $input = str_replace(array("[","]"),array("<",">"), $input);
  4. print($input);
  5.  


А если пользователь незакроет какой-нибудь бб-код(например b), и ваш шаблон сайта накроется медным тазом.

Я написал функцию которая переводит из бб-кодов в html. Но при этом она не закрытые и не открытые теги не переводит, а вот естественно сама функция:
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?PHP
  4.  
  5. /*@author Microteam inc*/
  6.  
  7. print(check_text(nl2br('
  8.  
  9. [b]Это жирный текст[/b]
  10. [a]Это незакрытый бб-код, а
  11. [/z] это неоткрытый бб-код
  12.  
  13. ')));
  14.  
  15. function check_text($text)
  16. {
  17.  
  18.         preg_match_all("/\\[[^\\]\\[\\/]+\\]/i", $text, $openbb);
  19.         preg_match_all("/\\[\\/[a-zA-Z0-9\\s]+\\]/i", $text, $closedbb);
  20.         $n = 1;
  21.         foreach ($openbb[0] as $bb)
  22.         {   preg_match("/\\[([^\\s\\/]+).*\\]/i",$bb, $open);
  23.                 for($i=0;$i<count($closedbb[0]);$i++)
  24.                 {
  25.                  preg_match("/\\[\\/([^\\s]+)\\]/i",$closedbb[0][$i], $close);
  26.                 if ($open[1] === $close[1]) {
  27.                  $text = preg_replace("/".preg_quote($open[0],"/")."/i",str_replace(array('[',']'),array('<','>'), $open[0]), $text, 1);
  28.                  $text = preg_replace("/".preg_quote($close[0],"/")."/i",str_replace(array('[',']'),array('<','>'), $close[0]), $text, 1);
  29.  
  30.                 $closedbb[0][$i] = false;
  31.                 }
  32.  
  33.                 }
  34.  
  35.         }
  36.  
  37.         return $text;
  38. }
  39.  
  40. ?>
  41.  
  42.  


нуу функция check_text() думаю понятна как работает, вводится текст, а возвращается текст с html кодами вместо bb)

(Отредактировано автором: 06 Декабря, 2011 - 18:35:17)



-----
int i = 6; ++i + i++ = ?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB