Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BBCode, как осуществить? 
:(
    Опции темы
ElusivE
Дата 28.1.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.3.2005

Репутация: нет
Всего: нет



Вот мне интерестно, как сделать ББКод? собственно мне нужно, чтобы когда я ввожу
Код

[url=http://lol.ru/]LOL.RU[/url] 

это все заменялось на
Код

<a href=http://lol.ru/>LOL.RU</a>


Как это сделать?
Добавлено @ 12:19
Кстати, прошу обратить внимание, что познание пхп у меня среднее
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 28.1.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



А поиском попользоваться?
Так, чтобы на виду лежало, выкладываю часть своего старого парсера.


Присоединённый файл ( Кол-во скачиваний: 35 )
Присоединённый файл  parser_tmpl.zip 3,03 Kb
PM ICQ   Вверх
2man
Дата 28.1.2006, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Балин! не успел smile
Вот пример типичного BB-кода:
Код

$txt = eregi_replace ("(.*)\\[url\\](.*)\\[/url\\](.*)","\\1<a href=\\2>\\2</a>\\3",$txt);

Добавлено @ 14:11
А если по-сложнее, то:
Код

$txt = preg_replace( "#(^|\s)((http|https|news|ftp)://\w+[^\s\[\]]+)#ie"  , "\$this->regex_build_url(array('html' => '\\2', 'show' => '\\2', 'st' => '\\1'))", $txt );

regex_build_url() :
Код

function regex_build_url($url=array()) {

                $skip_it = 0;

                // Make sure the last character isn't punctuation.. if it is, remove it and add it to the
                // end array

                if ( preg_match( "/([\.,\?]|!)$/", $url['html'], $match) )
                {
                        $url['end'] .= $match[1];
                        $url['html'] = preg_replace( "/([\.,\?]|!)$/", "", $url['html'] );
                        $url['show'] = preg_replace( "/([\.,\?]|!)$/", "", $url['show'] );
                }

                // Make sure it's not being used in a closing code/quote/html or sql block

                if (preg_match( "/\[\/(html|quote|code|sql)/i", $url['html']) )
                {
                        return $url['html'];
                }

                // clean up the ampersands
                $url['html'] = preg_replace( "/&amp;/" , "&" , $url['html'] );

                // Make sure we don't have a JS link
                $url['html'] = preg_replace( "/javascript:/i", "java script: ", $url['html'] );

                // Do we have http:// at the front?

                if ( ! preg_match("#^(http|news|https|ftp|aim)://#", $url['html'] ) )
                {
                        $url['html'] = 'http://'.$url['html'];
                }

                //-------------------------
                // Tidy up the viewable URL
                //-------------------------

                if (preg_match( "/^<img src/i", $url['show'] )) $skip_it = 1;

                $url['show'] = preg_replace( "/&amp;/" , "&" , $url['show'] );
                $url['show'] = preg_replace( "/javascript:/i", "javascript: ", $url['show'] );

                if ( (strlen($url['show']) -58 ) < 3 )  $skip_it = 1;

                // Make sure it's a "proper" url

                if (!preg_match( "/^(http|ftp|https|news):\/\//i", $url['show'] )) $skip_it = 1;

                $show     = $url['show'];

                if ($skip_it != 1) {
                        $stripped = preg_replace( "#^(http|ftp|https|news)://(\S+)$#i", "\\2", $url['show'] );
                        $uri_type = preg_replace( "#^(http|ftp|https|news)://(\S+)$#i", "\\1", $url['show'] );

                        $show = $uri_type.'://'.substr( $stripped , 0, 35 ).'...'.substr( $stripped , -15   );
                }

                return $url['st'] . "<a href='".$url['html']."' target='_blank'>".$show."</a>" . $url['end'];

        }





--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
podlom
  Дата 7.10.2008, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.4.2007
Где: Украина, г. Киев

Репутация: нет
Всего: нет



BBCode это не только тег url. Хотелось бы увидеть реализацию замены и других тегов типа: h1, h2, b, i, img и bq, а так же размышления по-поводу того как лучше реализовать и какие проблемы могут возникать.

PM MAIL WWW ICQ Skype   Вверх
SneG0K
Дата 7.10.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Цитата(podlom @  7.10.2008,  18:09 Найти цитируемый пост)
какие проблемы

Какие блин проблемы? Это просто замена текста одного другим!
Цитата(podlom @  7.10.2008,  18:09 Найти цитируемый пост)
реализацию замены и других тегов

Так же как и тег LINK
PM WWW Skype   Вверх
sTa1kEr
Дата 7.10.2008, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



PM MAIL   Вверх
Sunvas
Дата 8.10.2008, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



sTa1kEr, а "обратно" парсить он умеет? Из ХТМЛа в BB? - Иначе ж как тогда поступать: в базе данных хранить и каждый раз парсить? smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
sTa1kEr
Дата 8.10.2008, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(Sunvas @  8.10.2008,  01:29 Найти цитируемый пост)
в базе данных хранить и каждый раз парсить?

Именно. "Обратно парсить" bbcode - это, имхо, моветон.
PM MAIL   Вверх
skyboy
Дата 8.10.2008, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Sunvas @  7.10.2008,  23:29 Найти цитируемый пост)
в базе данных хранить и каждый раз парсить?

во-первых, рано или поздно захочешь расширить схему кодов. например, добавишь новые смайлы. а тут - сюрприз: старые сообщения храняться уже ХТМЛными и их не преобразуешь.
кроме того, htmlspecialchars ты тоже до записи в базу делаешь? 
PM MAIL   Вверх
Sunvas
Дата 8.10.2008, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(sTa1kEr @  8.10.2008,  05:32 Найти цитируемый пост)
Именно. "Обратно парсить" bbcode - это, имхо, моветон.

Это тупо маять сервер фигней (жрет производительность): проще один раз отпарсить, а потом только показывать результат вываливая содержимое базы на страницу. IPB так и делает.


Цитата(skyboy @  8.10.2008,  08:41 Найти цитируемый пост)
добавишь новые смайлы

Ну добавлю и что дальше? Формат смайлов - один и тот же.

Цитата(skyboy @  8.10.2008,  08:41 Найти цитируемый пост)
а тут - сюрприз: старые сообщения храняться уже ХТМЛными и их не преобразуешь.

Не понял хода мысли: зачем к уже сохраненным сообщениям дописывать смайлы?  smile 


Цитата(skyboy @  8.10.2008,  08:41 Найти цитируемый пост)
кроме того, htmlspecialchars ты тоже до записи в базу делаешь? 

Нет. Зачем?


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
DioNiR
Дата 8.10.2008, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 30.12.2006

Репутация: нет
Всего: нет



Цитата
во-первых, рано или поздно захочешь расширить схему кодов.
 
А что тут сложного то? Добавил и всё.

Цитата
например, добавишь новые смайлы. а тут - сюрприз: старые сообщения храняться уже ХТМЛными и их не преобразуешь.

Как сказал уже Sunvas

Цитата
кроме того, htmlspecialchars ты тоже до записи в базу делаешь?

Цитата
Нет. Зачем?

Значит ты пускаешь спокойный HTML код в ход?
--------------------
Думали это конец? Ха, всё только начинается.
PM MAIL   Вверх
HackMan
Дата 8.10.2008, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 8
Всего: 9



Есть два метода хранения данных: с постобработкой (без предварительной обработки) и предобработкой. Или попросту говоря - сырые данные (raw data), которые получены от пользователя, или данные, которые уже обработаны (например, прошли через htmlspecialchars())

Оба способа активно используются. Здесь же надо определиться со структурой сайта, в частности с тем, как эти данные будут использоваться. Например, если это комментарии пользователей, к товару, которые будут просто отображаться, и никаких больше действий над ними не будет производиться, тогда имеет смысл функцию htmlspecialchars() применить (обрабатывать данные) до занесения комментария в базу, что бы не делать этого каждый раз перед выводом, ведь это лишняя нагрузка на сервер. Рассмотрим теперь второй пример. На этом же сайте есть автоцензорный фильтр, который будет вырезать из комментария все маты и заменять их на ***. Этот фильтр наверняка будет дополняться новыми словами, и что бы не было такого, что в фильтр добавили новое слово, и в новых комментариях оно не проходит, а в старых отображается, имеет смысл применять автоцензор (обрабатывать данные) уже после занесения в базу, до вывода в браузер.

Вывод: если хранить данные с предобработкой - выигрываем в скорости выполнения и проигрываем в универсальности, а с постобработкой - с точностью наоборот. И выбор, каким из методов пользоваться, ложится на плечи разработчика.

Это сообщение отредактировал(а) HackMan - 8.10.2008, 19:16


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
sTa1kEr
Дата 8.10.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(Sunvas @  8.10.2008,  19:10 Найти цитируемый пост)
жрет производительность

1. На это потребуется совсем не много ресурсов, не больше чем любому шаблонизатору, str_replace или тому же htmlspecialchars()
2. Кеширование никто не отменял. А если уж говорить про проекты с высокой нагрузкой, то тем более большая часть данных как правило берется из кеша.

Цитата(Sunvas @  8.10.2008,  19:10 Найти цитируемый пост)

Нет. Зачем? 

Цитата(DioNiR @  8.10.2008,  19:36 Найти цитируемый пост)
А что тут сложного то? Добавил и всё.

Пример, винград, быстрая цитата. Ты нажал на быструю цитату и в нее подставился id поста, по которому затем можно получить дату, имя, etc. Однако, если пользователь решит отредактировать сообщение, то по дате и имени получить id уже не получится. Хорошо еще если можно как-то ссылку распознать и распарсить, и затем только из нее добыть этот id... Иначе данные, введенные пользователем, потеряны.

Или добавлени к сообщению, ставится метка времени, но для отображения никому не нужна эта метка, вместо нее пишется пройденное время. Если добавить в базу именнов таком виде - данные, введенные пользователем, потеряны.


Цитата(DioNiR @  8.10.2008,  19:36 Найти цитируемый пост)
например, добавишь новые смайлы. а тут - сюрприз: старые сообщения храняться уже ХТМЛными и их не преобразуешь.

Как сказал уже Sunvas

В каком виде смайлы должны хранятся в базе, что бы не пришлось делать постобработку сообщения перед выводом? В виде ссылок на конечные картинки. А теперь представь, что набор смайликов поменялся и ссылки уже должны ввести на совсем другие картинки. Кроме того опять же редактирование постов - ты понаставил смайликов ":)", редактируешь пост и видешь вместо своих смайликов кучу длиннющих тегов [ url ]


Цитата(DioNiR @  8.10.2008,  19:36 Найти цитируемый пост)
Значит ты пускаешь спокойный HTML код в ход?

Нет, htmlspecialchars необходимо использовать перед выводом, а не перед добавлением в базу.
PM MAIL   Вверх
nerezus
Дата 8.10.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



ооооо....
google://State Machine алгоритм
имхо на регекспах глупо делать - ибо человеческий фактор сыграет роль при куче регекспов, а потом XSS будут.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1124 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.