Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сложности в написание bbCode
 
 автор: algoritm   (08.01.2013 в 16:56)   письмо автору
 
 

Вот мой код, который с помощью функции preg_replace заменяет bbCode на HTML коде, не судите строго я новичок в регулярных выражениях.

function BbCode($str) 
{
   $str = preg_replace("/\[img align\=(.*)=(.*)](.*)\[\/img\]/Usi","<img align=\"\\1\" alt=\"\\2\"  src=\"\\3\" border=\"0\" margin:20px/>",$str);
}



В итоге выходит что-то вроде этого:
[img align=left=Рисунок]1.jpg[/img] //Выравнивание по левому краю и описание alt=Рисунок
а мне бы хотелось, чтобы было вот так,
[img align=left alt=Рисунок]1.jpg[/img]
и чтобы выравнивание и описание были не обязательными параметрами, стоит мне только прописать,
[img align=left] 1.jpg[/img] без описания как отображается обычная текстовая строка, помогите пожалуйста как мне лучше написать?

  Ответить  
 
 автор: Sfinks   (10.01.2013 в 00:12)   письмо автору
 
   для: algoritm   (08.01.2013 в 16:56)
 

$str = preg_replace( "#\[img([^\]]*)\](.*?)\[/img\]#si", '<img$1 src="$2" border=0 margin:20px>', $str );

  Ответить  
 
 автор: несовсем   (10.01.2013 в 03:25)
 
   для: Sfinks   (10.01.2013 в 00:12)
 

останется только попросить пользователей не юзать XSS-инъекции и не издеваться над дизайном страниц

  Ответить  
 
 автор: Sfinks   (10.01.2013 в 08:58)   письмо автору
 
   для: несовсем   (10.01.2013 в 03:25)
 

Ну да =) А что, не вариант? =)

С другой стороны, Ваше align\=(.*)=(.*) мало чем отличается, т.к. в $1 может быть и onclick и style.

Тогда проще всего не ухищряться с впихиванием всего в 1 РВ, а воспользоваться для более точного разбора функцией preg_replace_callback().

И еще вопрос - какие символы могут быть в атрибуте alt? Если любые, то пользователю нужно как-то вдолбить, что:
- либо его значение необходимо обрамлять кавычками и экранировать вложенные кавычки;
- либо он обязательно должен быть вторым и его значение - все что между = и ]
Вам какой вариант больше по душе?
По-моему второй предпочтительней. По крайней мере все ошибки и инъекции уйдут внутрь значения атрибута.

  Ответить  
 
 автор: algoritm   (11.01.2013 в 01:34)   письмо автору
 
   для: Sfinks   (10.01.2013 в 08:58)
 

Это только кусок кода, конечно я пропущу переменную $str через htmlspecialchars() и при внесение в базу у меня там еще несколько проверок стоит. Объясните как мне с помощью preg_replace_callback(), более точно разобрать bbCode [IMG]?

  Ответить  
 
 автор: Sfinks   (11.01.2013 в 02:26)   письмо автору
 
   для: algoritm   (11.01.2013 в 01:34)
 

Вы не ответили на мой вопрос. А 2 варианта писать не охото.

И еще...
> конечно я пропущу переменную $str через htmlspecialchars() и при внесение в базу у меня там
> еще несколько проверок стоит.

При внесении в БД достаточно одной функции - mysql_real_escape_string()
В остальном вносите все как есть.
А обработку ВВ-кодов, фильтрацию и htmlspecialchars() лучше выполнять уже при выводе в браузер.
Поверьте, так меньше хлопот и шансов запутаться.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования