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 :: Версия для печати :: Экранирование BBCode
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Экранирование BBCode

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

1. bt_corp - 26 Июня, 2012 - 09:14:11 - перейти к сообщению
На сайте работают ББ коды, нужно их экранировать чтобы когда определенный текст с bbcode был в теге [shield] [/shield] то все теги которые есть внутри этого должны отображаться как обычный текст при обработке.

Например так как здесь на форуме, но эта возможность реализована в теге code:

Как это сделать?

CODE (text):
скопировать код в буфер обмена
  1. [b]Жанр:[/b] комедія
  2. [b]Країна:[/b] США
  3.  
  4. [img]http://www.imdb.com/title/tt1636826/[/img]
  5.  
  6. [b]Кіностудія / кінокомпанія:[/b] Green Hat Films, Silver Pictures
  7. [b]Режисер:[/b] Ніна Нурізаде
  8. [b]Актори:[/b] Томас Манн, Олівер Купер, Джонатан Деніел Браун, Дакс Флейм, Кірбі Блісс Блантон
  9.  
  10. [b]Сюжет:[/b]
  11. У центрі історії троє однокласників, які вирішили влаштувати круту вечірку і прославитися на всю округу. Звісно, утримати події під контролем у них не вийшло і тусовка розростається настільки, що зупинити її вже нікому не під силу... Буде круто!
  12.  
  13. [b]Тривалість:[/b]
  14. [b]Відео: [/b]
  15.  

(Добавление)
Нашел правило которое делает то что нужно, но не работает если в тексте есть перенос на новую строку, за перенос в редакторе отвечает функция nl2br

Помогите переписать это правило чтобы работало независимо от переносов!

Разделил сущности символов потому что их не отражает форум.

CODE (htmlphp):
скопировать код в буфер обмена
  1. $text = preg_replace('~\[shield\](.+?)\[/shield\]~ie', '\'<div>\' . strtr(\'$1\', array(\'[\' => \'& #91;\', \']\' => \'& #93;\', \':\' => \'& #58;\', \'@\' => \'& #64;\')) . \'</div>\'', $text);
2. IllusionMH - 26 Июня, 2012 - 10:50:01 - перейти к сообщению
bt_corp, что такое модификатор e я не знаю, но, возможно, не хватает додификатора m для многострочного поиска
3. bt_corp - 26 Июня, 2012 - 11:42:48 - перейти к сообщению
IllusionMH пишет:
bt_corp, что такое модификатор e я не знаю, но, возможно, не хватает додификатора m для многострочного поиска


модификатор e - заставляет PHP интерпритировать второй параметр функции preg_replace как PHP код

хмм, не работает..
(Добавление)
Проблема решена! Улыбка

Разделил сущности символов потому что их не отражает форум. (убрать пробелы и будет работать)

Правило для экранирования бб кодов:
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace('~\[shield\](.+?)\[/shield\]~sie', '\'<div>\' . strtr(\'$1\', array(\'[\' => \'& #91;\', \']\' => \'& #93;\', \':\' => \'& #58;\', \'@\' => \'& #64;\')) . \'</div>\'', $text);

 

Powered by ExBB FM 1.0 RC1