Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » BBcode на своём сайте

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В общем, логически думая - я пришёл к выводу, что скриптик этих кодов должен срабатывать перед добавлением тех же новостей в БД...
Вот кусок кода добавления:
 

Код:
 
$htinl_recipe = nl2br($text);
$data=date("j-m-Y G:i");
extract($_POST);
@mysql_connect("localhost", "root", "") or die("Не могу подключиться к серверу MySQL!");  
@mysql_select_db("portal") or die("Не могу подсоедениться к базе сайта!");
$sql = "INSERT into `news` VALUES ('', '$data', '$title', '$htinl_recipe', '$poster')";    
$result = mysql_query($sql);
 

 
То есть на этот кусок ссылается прога при добавлении новостей в базу данных...
 
Значит, где-то в районе  
$htinl_recipe = nl2br($text);
нужно что-то добавить... $htinl_recipe = nl2br($text); - это преобразование $text.. Типа вместо \n - получается <br>
Ну и как сделать тут так, чтобы вместо
Код:
 
 %) [img][/img]
 
- получалось то, что надо?

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 18:48 01-10-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Church
www.php.net/str_replace
www.php.net/preg_replace
www.php.net/ereg_replace

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:20 01-10-2003
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Знаю я этот сайт... Я английский не знаю ВООБЩЕ
Ну что, сложно примерчик привести? :mol:

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 19:48 01-10-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Church

Цитата:
Ну что, сложно примерчик привести? :mol:

Для каждой функции внизу есть примерчики
зы: либо смотри тут
http://forum.ru-board.com/topic.cgi?forum=24&topic=2827#1

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:01 01-10-2003 | Исправлено: Cheery, 20:07 01-10-2003
Sergeant

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коды (собственно, как и переделывание \n в <br>) должны обрабатываться после вывода из базы. В базе же должен храниться чистый текст, введенный в форму.
 
А то захочешь потом одну какую-нибудь рюшечку исправить в своих кодах, а у тебя уже весь текст в базе (она может быть очень даже немаленькой) обработан. Писать функцию по обратному преобразованию?

----------
Если вы спорите с идиотом,
Наверняка, он занимается тем же самым.

Всего записей: 1553 | Зарегистр. 06-08-2001 | Отправлено: 20:53 01-10-2003
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sergeant

Кульна... Хотя и логично...
Но всё-равно.. Я пока что тока с \n разобрался Ну не получается ничего у меня другого..
 
Ну дайте вы ко-о-од... Плиииииизззззззз...

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 21:05 01-10-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Church

Цитата:
Ну не получается ничего у меня другого..  

Конкретнее.. Из этого я не понял, если честно

Цитата:
  %) [img][/img]  



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:27 01-10-2003
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
http://i.ru-board.com/codes.html
Там всё написано
Вот мне такое же надо и у себя

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 21:40 01-10-2003
ripperm



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Church, вот например функция:

Цитата:
 
function bbcode($news) {
$news = addslashes($news);
$news = preg_replace("/\[b\]([^\[\]]+)\[\/b\]/i","<b>\\1</b>",$news);
$news = preg_replace("/\[i\]([^\[\]]+)\[\/i\]/i","<i>\\1</i>",$news);
$news = preg_replace("/\[u\]([^\[\]]+)\[\/u\]/i","<u>\\1</u>",$news);
$news = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/","<a href=\\1 target=_blank>\\2</a>",$news);
$news = preg_replace("/\[email=(.*?)\](.*?)\[\/email\]/","<a href=mailto:\\1>\\2</a>",$news);
$news = preg_replace("/\/\[url\]([^\[\]]+)\[\/url\]/i","<a href=\\1 target=_blank>\\1</a>",$news);
$news = preg_replace("/\[url\](.*?)/","<a href=\\1 target=_blank>\\1</a>",$news);
$news = preg_replace("/\[align=(.*?)\](.*?)\[\/align\]/","<div align=\\1>\\2</div>",$news);
$news = preg_replace("/\[img\](.*?)\[\/img\]/","<img src='\\1' border=0>",$news);
$news = preg_replace("/\[color=(.*?)\](.*?)\[\/color\]/","<font color=\\1>\\2</font>",$news);
$news = preg_replace("/\[font=(.*?)\](.*?)\[\/font\]/","<font face=\\1>\\2</font>",$news);
$news = preg_replace("/\[size=(.*?)\](.*?)\[\/size\]/","<font size=\\1>\\2</font>",$news);
$news = preg_replace("/\[quote\]([^\[\]]+)\[\/quote\]/i","<blockquote><i>\\1</i></blockquote>",$news);
$news = preg_replace("/\[image\](.*?)\[\/image\]/","<img border=0 src=\\1>",$news);
$news = preg_replace("/\[flash\](.*?)\[\/flash\]/","<embed src=\"\\1\" quality=\"high\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" type=\"application/x-shockwave-flash\"></embed>",$news);
$news = stripslashes($news);
return $news;
}
 

И после того как ты получил свой $text из файла делаешь:
$text = bbcode($text);  
Вот и все кино...

Всего записей: 302 | Зарегистр. 03-06-2002 | Отправлено: 16:48 02-10-2003
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ripperm
Ооооооо..... Куль..... Спасибки.. Буду разбираться

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 15:16 03-10-2003
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Church, если для новостей то нормально всё подойдёт, но если надумаешь код использовать для комментариев и т.п., то придётся кое-что добавить :
Сюда
Цитата:
$news = preg_replace("/\[image\](.*?)\[\/image\]/","<img border=0 src=\\1>",$news);
$news = preg_replace("/\[img\](.*?)\[\/img\]/","<img src='\\1' border=0>",$news);  

ещё нужно будет добавить проверку того, что ссылки не начинаются на javascript:,
иначе добрые пользователи могут начать любые javascript'ы на страницы вставлять.
И заодно пробелы в ссылках неплохо заменять на %20 (или кавычки на %22)-- иначе вещи вроде такого:
[img]http://site.com/image.gif" onmousemove="location.href='http://site.com/'"[/img] могут ненароком в постах появиться...


----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 03:29 05-10-2003
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Svarga
Сенькс.. Учту... В новостях мне как-то по барабану.. Там коментов нету... пока что..
А вот в гостевухе есть.... Вернее там тока коменты и есть

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 23:58 05-10-2003
knigman



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если в коде написать:
[урл]http://test.ru[/урл]
(Вместо урл - url)
 
то приведенный выше листинг некорректно обрабатывает его. На выходе получается   http://test.ru[/url].
Как это исправить?

Всего записей: 541 | Зарегистр. 03-09-2004 | Отправлено: 17:58 27-05-2005 | Исправлено: knigman, 17:59 27-05-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Как это исправить?
PHP FAQ: Регулярные выражения.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 18:20 27-05-2005
ManHunter



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
$news = preg_replace("/\[url\](.*?)\[\/url\]/","<a href=\\1 target=_blank>\\1</a>",$news);  

но все равно желательно не просто заменять (.*?), в тегах [url], [email], [img], а еще и проверять валидность этого (.*?).
У меня так чуть форум не нахлобучили через XSS, ладно я IE никогда не пользуюсь, а то бы все куки увели.
 
Вот что работает у меня на сайте:

Код:
function tag_to_html($str) {
$pattern = array("/\[url\]((http:\/\/|www\.|ftp:\/\/).*?)\[\/url\]/i",
                 "/\[url=((http:\/\/|www\.|ftp:\/\/)[a-z0-9\~\@\#\(\)\!\?\,\.\/\%\=\:\&\+\;\_\-]*?)\](.*?)\[\/url\]/i",
                 "/\[img\](http:\/\/[a-z0-9\~\@\(\)\!\,\.\/\=\:\+\;\_\-]*?\.(png|jpg|jpeg|gif))\[\/img\]/i",
                 "/\[b\](.*?)\[\/b\]/i",
                 "/\[u\](.*?)\[\/u\]/i",
                 "/\[i\](.*?)\[\/i\]/i",
                 "/\[s\](.*?)\[\/s\]/i",
                 "/\[marquee\](.*?)\[\/marquee\]/i",
                 "/\[center\](.*?)\[\/center\]/i",
                 "/\[color=([0-9a-z\#]+)\](.*?)\[\/color\]/i",
                 "/\[size=1\](.*?)\[\/size\]/i",
                 "/\[size=2\](.*?)\[\/size\]/i",
                 "/\[size=3\](.*?)\[\/size\]/i",
                 "/\[size=4\](.*?)\[\/size\]/i",
                 "/\[size=5\](.*?)\[\/size\]/i",
                 "/\[size=6\](.*?)\[\/size\]/i",
                 "/\[email\]([A-Za-z0-9_\-\.]+\@([A-Za-z0-9_\-]+\.){1,}[A-Za-z]+)\[\/email\]/i",
                 "/\[email=([A-Za-z0-9_\-\.]+\@([A-Za-z0-9_\-]+\.){1,}[A-Za-z]+)\](.*?)\[\/email\]/i"
                );
$replacement = array("<a class=\"nn\" href=\"\${1}\" target=\"_blank\">\${1}</a>",
                     "<a class=\"nn\" href=\"\${1}\" target=\"_blank\">\${3}</a>",
                     "<img src=\"\${1}\" border=\"0\" alt=\"user posted image\">",
                     "<b>\${1}</b>",
                     "<u>\${1}</u>",
                     "<i>\${1}</i>",
                     "<s>\${1}</s>",
                     "<marquee direction=\"RIGHT\">\${1}</marquee>",
                     "<center>\${1}</center>",
                     "<font color=\${1}>\${2}</font>",
                     "<span style=\"font-size:9pt\">\${1}</span>",
                     "<span style=\"font-size:13pt\">\${1}</span>",
                     "<span style=\"font-size:15pt\">\${1}</span>",
                     "<span style=\"font-size:17pt\">\${1}</span>",
                     "<span style=\"font-size:21pt\">\${1}</span>",
                     "<span style=\"font-size:27pt\">\${1}</span>",
                     "<a class=\"nn\" href=\"mailto:\${1}\">\${1}</a>",
                     "<a class=\"nn\" href=\"mailto:\${1}\">\${3}</a>"
                    );
  return(preg_replace($pattern, $replacement, $str));
}


----------
"На любое мое движение ваша реакция предусмотрена,
В лучшем случае - равнодушие, в худшем случае - патология..." (C) Егор Летов

Всего записей: 3102 | Зарегистр. 20-03-2004 | Отправлено: 14:44 31-05-2005 | Исправлено: ManHunter, 14:51 31-05-2005
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Выдрал тут из новостного движка (Сutenews) BBCode, но что-то не хотят они вставляться ...
 
Вот собственно сам файлик: http://slil.ru/22453006
 
Моет у кого-нибудь есть гтовый и работающий?

----------
comming soon..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 21:43 30-10-2005
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Выдрал тут из новостного движка (Сutenews) BBCode, но что-то не хотят они вставляться ...  

 
С таким содержимым он и не должен работать. Ошибки в JS, ошибки в HTML..
 
С каких пор можно использовать два textarea с одним именем?

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 23:54 30-10-2005
Maxer



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6epcepk

Цитата:
Моет у кого-нибудь есть гтовый и работающий?

на один пост выше твоего код BBcode парсера. я его использую, нормально работает.

----------
красный феррари

Всего записей: 5225 | Зарегистр. 04-05-2004 | Отправлено: 00:00 31-10-2005
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
С таким содержимым он и не должен работать. Ошибки в JS, ошибки в HTML..  
 
С каких пор можно использовать два textarea с одним именем?

Да я сам удивляюсь как он работал ... но работал исправно (:
 
Maxer
А можно полностью скрипт (с JavaScript'om)?

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 00:06 31-10-2005
Maxer



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6epcepk
нет, это не javascript, это PHP код. сервак его выполняет

----------
красный феррари

Всего записей: 5225 | Зарегистр. 04-05-2004 | Отправлено: 00:16 31-10-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » BBcode на своём сайте


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru