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. DimKA - 10 Января, 2010 - 23:26:17 - перейти к сообщению
Помогите пожалуйста или хотя бы дайте наводку что где почитать или посмотреть пример как организовать смайлы и BB-коды Улыбка ! есть переменная $message она заносится в бд и потом из бд выводится как мне заменять определенные символы

например .smile. на <ims src="smile.gif" alt="smile"> ?

также текст на <b>текст</b> или <strong></string>
2. SAD - 10 Января, 2010 - 23:32:20 - перейти к сообщению
google и регулярные выражения вам в помощь
3. RomAndry - 10 Января, 2010 - 23:43:14 - перейти к сообщению
нужны правила создания смайлов и обрамления, далее регулярным выражением парсится сообщение, желательно до записи в БД

как вариант, скачать исходники форумов и посмотреть как реализовано.
А вот когда будут вопросы, проблемы - с удовольствием поможем.
4. DimKA - 11 Января, 2010 - 16:11:30 - перейти к сообщению
вот фрагмент кода

PHP:
скопировать код в буфер обмена
  1. if(isset($_POST['message']))
  2. {
  3.  
  4.     $message = $_POST['message'];
  5. }
  6. function bb($message){
  7. $message=str_replace('[b ]','<b>',$str);
  8. $message=str_replace('[ /b]','</b>',$str);
  9. $message=str_replace('[red]','<font color=red>',$str);
  10. $m=str_replace('[/red]','</font>',$str); //ну и т.д.
  11. return $message;
  12. }
  13. $r = mysql_query ("INSERT INTO users (name,message) VALUES
  14. ('$name','$message')") or die (mysql_error());


помогите теперь обработать функц. переменную ,message это сам текст сообщения который заносится в бд.
5. JustUserR - 11 Января, 2010 - 16:29:14 - перейти к сообщению
DimKA Не совсем так - необходимо проверяьь на закрытие BB-кодов а то в вашем случае сделаю [b] [red] и весь оставлийся текст может быть жирным и красным Улыбка Так что надо проверять как минимум парность открыващих и закрыващих тегов а как максимум через стек проверять правильность их закрытия по очередности
6. DimKA - 11 Января, 2010 - 20:47:29 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $bbcode = array(
  2.  
  3. '/\[i\](.+)\[\/i\]/isU' => '<em>$1</em>',
  4.  
  5. '/\[b\](.+)\[\/b\]/isU' => '<strong>$1</strong>',
  6.  
  7. '/\[sub\](.+)\[\/sub\]/isU' => '<sub>$1</sub>',
  8.  
  9. '/\[sup\](.+)\[\/sup\]/isU' => '<sup>$1</sup>',
  10.  
  11. '/\[del\](.+)\[\/del\]/isU' => '<del>$1</del>',
  12.  
  13. '/\[u\](.+)\[\/u\]/isU' => '<span style="text-decoration:underline;">$1</span>',
  14.  
  15. '/\[big\](.+)\[\/big\]/isU' => '<span style="font-size:large;">$1</span>',
  16.  
  17. '/\[small\](.+)\[\/small\]/isU' => '<span style="font-size:small;">$1</span>',
  18.  
  19. '/\[code\](.+)\[\/code\]/isU' => '<code>$1</code>',
  20.  
  21. '/\[red\](.+)\[\/red\]/isU' => '<span style="color:#ff0000;">$1</span>',
  22.  
  23. '/\[yellow\](.+)\[\/yellow\]/isU' => '<span style="color:#ffff22;">$1</span>',
  24.  
  25. '/\[green\](.+)\[\/green\]/isU' => '<span style="color:#00bb00;">$1</span>',
  26.  
  27. '/\[blue\](.+)\[\/blue\]/isU' => '<span style="color:#0000bb;">$1</span>',
  28.  
  29. '/\[white\](.+)\[\/white\]/isU' => '<span style="color:#ffffff;">$1</span>',
  30.  
  31. '/\[size=([0-9]+)\](.+)\[\/size\]/isU' => '<span style="font-size:$1px;">$2</span>',
  32.  
  33. '#\[color=(\#[0-9A-F]{3,6}|[a-z\-]+)\](.*)\[/color\]#isU' => '<span style="color: \\1">\\2</span>',
  34.  
  35. '#\[align=(left|right|center)\](.*)\[/align\]#isU' => '<p style="text-align: \\1">\\2</p>');
  36.  
  37. return preg_replace(array_keys($bbcode), array_values($bbcode), $text);
  38.  
  39. }


нашел функцию,попробывал все работает..

вот ток не пойму '/\[i\](.+)\[\/i\]/isU' для чего "(.+)" нужно? Улыбка
7. Ammy - 11 Января, 2010 - 21:10:28 - перейти к сообщению
Цитата:
вот ток не пойму '/\[i\](.+)\[\/i\]/isU' для чего "(.+)" нужно?


. - любой символ, кроме перевода строки;
+ - одно или более вхождений (этого любого символа);

Champion's Regexp
8. DimKA - 11 Января, 2010 - 21:15:30 - перейти к сообщению
Ammy и JustUserR спасиб!
9. JustUserR - 11 Января, 2010 - 22:05:08 - перейти к сообщению
DimKA Пожалуйста - но у вас опять допущена небольшая ошибка - надо заменить (.+) на (.+?) иначе текст между двумя тегами будет обрабатываться неправильно - читайте о жадных и нежадных квантификаторах
10. DimKA - 11 Января, 2010 - 22:08:20 - перейти к сообщению
JustUserR Закатив глазки спасибо!

а вот как быть теперь со смайлами ? также как и с бб-кодами?
(Добавление)
PHP:
скопировать код в буфер обмена
  1. function smile($text)
  2. {
  3.     $smile = array (
  4.  
  5.      '.lol.' => '<img src="http://site.com/lol.png">'
  6.  
  7.  
  8.     );
  9. return str_replace(array_keys($smile),array_values($smile),$text);
  10.    
  11. }


так можно? просто мне почему-то кажется что я что-то не учёл или сделал не правильно,так как видел функции намного сложнее чем моя )
11. Gamer-X - 02 Сентября, 2012 - 20:21:10 - перейти к сообщению
а можете помочь с обратным "декодированием" html в bbcode? ну то есть, если я найду вот эти теги из данного массива, то чтобы обратно ббкоднуло?) я в регулярках пока не разбираюсь, самому сделать не получается
12. Jenni - 06 Июля, 2014 - 06:00:03 - перейти к сообщению
Подскажите пожалуйста. вот у меня bb коды работают вот так.
PHP:
скопировать код в буфер обмена
  1. function apicms_bb_code($msg){
  2.   $msg = preg_replace('#\[big\](.*?)\[/big\]#si', '<big>\1</big>', $msg);
  3.   $msg = preg_replace('#\[b\](.*?)\[/b\]#si', '<b>\1</b>', $msg);
  4. return $msg; }

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

PHP:
скопировать код в буфер обмена
  1. $msg = html_entity_decode(trim($msg), ENT_QUOTES, 'UTF-8');
  2. $msg = substr($msg, 0,2) != "<?" ? "<?PHP \n" . $msg . "\n ?>" : $msg;
  3. $msg = highlight_string(stripslashes($msg), true);

пробывала так, но весь тест меняется, через if(){} не знаю как правильно составить.

 

Powered by ExBB FM 1.0 RC1