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

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

1. neatek - 19 Января, 2012 - 12:07:02 - перейти к сообщению
1) Как определить что находить после знака равно в конструкции [img=]
2) Как правильно заменять бб код на HTML код?
2. Данил_123 - 19 Января, 2012 - 12:19:26 - перейти к сообщению
2)
PHP:
скопировать код в буфер обмена
  1. $arrBB = array("[B]","[/B]");
  2. $arrHTML = array("<b>","</b>");
  3. $string = "[B]Жирно[/B], не жирно";
  4. print(str_replace($arrBB, $arrHTML, $string));
3. neatek - 19 Января, 2012 - 12:29:33 - перейти к сообщению
Ну так это я и сам мог написать.

меня интересует как определить вот это: [IMG=ТЕКСТ]
Вопрос: ак в данной конструкции получить ТЕКСТ

Далее если просто делать замену [IMG= и ] на <img src=" и ">
То можно запросто впихнуть XSS...
Вопрос: Но как сделать так чтобы замена тегов ББ на HTML шла безопасно?

Надеюсь вы меня поняли.

PS. меня не интересует замена стандартных тегов: [b] [u] [i] и.т.д, это легко и безопасно.
4. Okula - 19 Января, 2012 - 12:44:57 - перейти к сообщению
Данил_123, неверно. Если не закрыть тег [b] то у тебя весь текст станет "жирным"
5. neatek - 19 Января, 2012 - 12:47:12 - перейти к сообщению
Okula пишет:
Данил_123, неверно. Если не закрыть тег [b] то у тебя весь текст станет "жирным"

Можно использовать str_replace, посчитать скоко замен сделано, далее если замен [*b] меньше чем [*/b], то добавляем в конец текста нужное количество тегов.

neatek пишет:
меня интересует как определить вот это: [IMG=ТЕКСТ]
Вопрос: Как в данной конструкции получить ТЕКСТ

Далее если просто делать замену [IMG= и ] на <img src=" и ">
То можно запросто впихнуть XSS...
Вопрос: Но как сделать так чтобы замена тегов ББ на HTML шла безопасно?
6. Данил_123 - 19 Января, 2012 - 12:53:47 - перейти к сообщению
Okula да так и есть..
7. Okula - 19 Января, 2012 - 14:09:35 - перейти к сообщению
neatek пишет:
Можно использовать str_replace, посчитать скоко замен сделано, далее если замен [*b] меньше чем [*/b], то добавляем в конец текста нужное количество тегов.

Это говнокод будет. Вот нормальный бб-код тега <b>
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace("~\[b\](.+?)\[/b\]~is", "<b>$1</b>", $text);
8. BendeR_say - 19 Января, 2012 - 15:36:51 - перейти к сообщению
Okula
Можно подробней, что означает (.+?) в это регулярке?
9. Okula - 19 Января, 2012 - 16:14:39 - перейти к сообщению
Разберу всё по порядку:
. - Точка. Совпадает с любым символом, кроме перевода строки.
+ - Квантификатор совпадений. Обозначает одно или более совпадений с предшествующим квантификатору символом или шаблоном.
? - Квантификатор совпадений. Обозначает ноль или одно совпадение с предшествующим квантификатору символом или шаблоном.
(...) - Определяет вложенный шаблон, который может использоваться для группировки некоторых элементов.

В данном примере квантификатор ? работает как "таблетка от жадности". Устанавливая его после квантификаторов + или * будет ставиться минимальное совпадение по шаблону.

Также для отключение жадности есть модификатор U устанавливая его в регулярном выражении "жадные" квантификаторы становятся "ленивыми", а "жадность" включается квантификатором ?

Тоесть приведённое мной выше регулярное выражение может быть записано так:
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace("~\[b\](.+)\[/b\]~Uis", "<b>$1</b>", $text);
10. BendeR_say - 19 Января, 2012 - 16:19:28 - перейти к сообщению
Спасибо! Закатив глазки
isU это так называемые модификаторы в регулярных выражениях. Каждая буква меняет поведение регулярного выражения.

i Включает нечувствительность выражения к регистру символов
s Включает режим соответствия точки символам переноса строки и возврата каретки
U Делает все количественные метасимволы "не жадными" по умолчанию.
Это для будущего)

 

Powered by ExBB FM 1.0 RC1