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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Исследование. Особенности парсинга сообщений в html-кодах и в bb-кодах

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Сбор информации, обсуждение и подготовка обзорной статьи о парсинге сообщений в html-кодах и в bb-кодах
sadex
Отправлено: 04 Июля, 2013 - 10:09:35
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




Цель. Сбор информации, обсуждение и подготовка обзорной статьи о парсинге сообщений в html-кодах и в bb-кодах.

Название статьи: "Принципы парсинга сообщений. Применение html-кодов и bb-кодов".

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

Рассматриваемые вопросы
* Парсинг сообщений в bb-кодах.
* Хранение сообщений в БД с форматированием текста в bb-кодах.
* Парсинг сообщений в html-кодах
* Хранение сообщений в БД с форматированием текста в html-кодах.
* Возможности и ограничения оптимизации форматирования и парсинга текста в html-кодах за счет записи значений атрибутов html-тегов без кавычек.

Текущая ситуация. Проблемы и решения

На текущий момент форматирование и парсинг текста сообщений в блогах, комментариях, на форумах и т.д. в bb-кодах весьма популярно,. В частности, парсинг bb-кодов довольно хорошо отработан на форумном движке FluxBB последних версий. При этом в БД хранится текст сообщений, отформатированных в bb-кодах. Такой подход имеет ряд ограничений и недостатков. Например, необходимость парсить сообщения (преобразовывать из представления в bb-кодах в представление в html) при каждом просмотре сообщения. Это может довольно серьезно нагружать сервер хостера . В то же время, хранение в БД соощений, отформатированных в html-кодах, избавляет от необходимости парсить такие сообщения при их просмотре (отображении). Однако, парсинг таких сообщений при их создании и редактировании существенно сложеннее парсинга в bb-кодах. Кроме того, хранение в БД сообщений, отформатированных в html-кодах обладает ощутимой избыточностью, по сравнению с хранением в БД сообщений, отформатированных в bb-кодах. Определенным образом упростить операции с сообщениями в html-кодах может определение правил, по которым возможна запись значений атрибутов html-тегов, используемых для форматирования, без кавычек. При этом ощутимо упрощается парсинг таких сообщений. Но и, соответственно, появляются некоторые ограничения форматирования, поскольку запись значений атрибутов html-тегов без кавычек не всегда допустима. Насколько серьезны такие ограничения - предстоит выяснить при обсуждении темы. Мне представляется, что при грамотном подходе эти ограничения на 95% можно обойти, получая при этом доволльно мошный и богатые возможности форматирования текста сообщений в html-кодах. Со всеми преимуществами такого подхода.

PS. На этом форуме, как я наблюдаю, создание сообщений также происходит с форматированием в bb-кодах.


Отредактировано администратором: EuGen, 04 Июля, 2013 - 10:16:47
Прямые ссылки в целях переиздания имеющихся сторонних материалов недопустимы
 
 Top
avtor.fox
Отправлено: 04 Июля, 2013 - 10:13:24
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




щто? Однако
пиар своего "форума разработчиков"?
 
 Top
sadex
Отправлено: 04 Июля, 2013 - 10:18:42
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




avtor.fox пишет:
щто? Однако
пиар своего "форума разработчиков"?


А продуктивных мыслей нет? Нет никакого "форума разработчиков", есть обкатка движка в экстримальном режиме на бесплатном хостинге. И скоро этот движок оттуда будет снесен. И какой смысл пиарить то, чему суждено исчезнуть? Просто сейчас там в тестовом режиме обкатываются и определенные решения по парсингу, о которых говорится в теме. Т.е. кое-что можно посмотреть и пощупать руками в реальной работе. Остальное - в теме. Меня вопросы темы интересуют гораздо больше, чем ссылка на рабочий пример. Ссылку могу хоть сейчас убрать, если публике не нравится.

Насколько я понимаю, на этом форуме, также как и на FluxBB, в БД хранятся сообщения, пропарсенные при создании и отформатированные в bb-кодах. Значит, проблема аналогичная. При каждом просмотре таких сообщений не только участниками форума, но и любыми случайными посетителями, которых в десятки раз больше участников, такое сообщение надо доставать из БД, парсить его из представления в bb-кодах в html-представление, и генерировать страницу с сообщением уже в окончательном html-представлении. А это изърядная нагрузка на сервер при относительно плотной посещаемости форума.

(Отредактировано автором: 04 Июля, 2013 - 10:29:05)

 
 Top
avtor.fox
Отправлено: 04 Июля, 2013 - 10:27:24
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




sadex, Вы разводите воду-водную, а от меня требуете конструктивности (думаю, что Вы немного запутались в терминах)? Всё за Вас уже давно обдумано и решено.
 
 Top
sadex
Отправлено: 04 Июля, 2013 - 10:31:54
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




avtor.fox пишет:
Всё за Вас уже давно обдумано и решено.
Все - не может быть решено. Эта проблема продолжает обсуждаться на разных ресурсах, и единого мнения не сложилось. Кто-то отстаивает работу с bb-кодами, кто-то с html-кодами.

По поводу возможности записи значений атрибутов html-тегов без кавычек - это тоже интересный вопрос. В HTML5 это вполне допускается. Часто это во многом упрощает работу парсера.

(Отредактировано автором: 04 Июля, 2013 - 10:38:17)

 
 Top
caballero
Отправлено: 04 Июля, 2013 - 10:41:48
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




хранение HTML в Бд как минимум будет занимать больше места.

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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
sadex
Отправлено: 04 Июля, 2013 - 11:42:17
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




caballero пишет:
хранение HTML в Бд как минимум будет занимать больше места.
А насколько больше? Сам объем форматирования (в bb или в html) по отношению к объему текста не так уж и велик, имхо. Ну несколько увеличится объем форматирования в html по сравнению с объемом оного в bb - ничего страшного. На то она и БД, чтобы расплачиваться некоторым несущественным увеличением своего объема для создания удобства и увеличения скорости работы движка, плюс снижения нагрузки на сервер при отображении сообщений. Значительного снижения, поскольку сообщения, отформатированные и хранимые в БД в html представлении парсить при отображении практически не нужно.

caballero пишет:
вообще, когда я писал свой форум - такая мысль была но отказался от нее, к сожалению не помню почему.
Точно не уверен, но вроде бы в SMF сообщения в БД хранятся с HTML-форматированием.
 
 Top
vanicon
Отправлено: 04 Июля, 2013 - 12:27:51
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




sadex
Скорость да наверное возрастет, но тут есть существенный минус, что если допустим поменяются какие-нибудь стили или разметка, то что делать будите, с разметкой которая в бд?


-----
Так было, так есть и так будет
 
 Top
sadex
Отправлено: 04 Июля, 2013 - 13:30:56
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




vanicon пишет:
если допустим поменяются какие-нибудь стили или разметка, то что делать будите, с разметкой которая в бд?
Встречный вопрос. Что будете делать в аналогичном случае, если форматирование текста сообщений хранится в БД в bb-кодах?

Сугубое имхо. Разметка отформатированного текста сообщений (кроме заголовков этих сообщений, которые подобным образом - через bb- или html-коды - вообще не форматируются) не имеет особого отношения к стилю самого сайта (блога, форума и т.д.).

Ведь эта разметка отдана на откуп юзеру, на его усмотрение. И потому она может быть совершенно любой. Свободу юзера при этом определяет или создатель сайта или админ, эта свобода зависит исключительно от состава опций панели инструментов формы редактирования сообщений. А состав этих опция для админов и модераторов может быть один (обширный) а для рядовых юзеров другой (минималоьтный, например только B, I, U, quote, code, url - без цветов).

Здесь состав таких опций для рядовых юзеров довольно богатый...

Вопрос - как повлияли мои упражнения со здешними довольно богатыми опциями bb-кодов для юзеров на общий стиль форума? Имхо - почти никак. Они повлияли только на стиль моего сообщения.

vanicon пишет:
Скорость да наверное возрастет
Не только в скорости дело. Появляется возможность исключить процедуру (довольно затратную по ресурсам сервера) парсинга сообщений при их простом просмотре огромной массой посетителей форума. Если запрос на просмотр сообщений одновременно подают 200-300 посетителей, и для каждого надо запускать процедуру парсинга - это тяжелый случай. А если парсинг не надо при этом запускать, а просто взять сообщение из БД и отобразить для посетителя - это гораздо легче.

(Отредактировано автором: 04 Июля, 2013 - 14:39:31)

 
 Top
Мелкий Супермодератор
Отправлено: 04 Июля, 2013 - 13:44:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




sadex пишет:
Что будете делать в аналогичном случае, если форматирование текста сообщений хранится в БД в bb-кодах?

Давайте определимся для начала, про который говорим HTML.
Есть HTML как средство полностью видимое пользователю - фактически, никакой разницы с BB не имеет, только синтаксис чуть другой. Их обоих надо яростно и пристально фильтровать и валидировать.
И есть HTML, который идёт в отрендеринной странице форума. Где совершенно безобидный исходный тег CODE даёт килобайты форматирования. А подсветка синтаксиса имеет свойство совершенствоваться. Например, не было указано слово implements как ключевое. Подсветка должна быть обновлена на всё форуме, что делать?

Вы про хранение в базе которого из?

Я за вариант хранить в базе исходное сообщение (совершенно безразлично что это будет, подмножество HTML или BB), рендер этого сообщения - в мемкэше.


-----
PostgreSQL DBA
 
 Top
sadex
Отправлено: 04 Июля, 2013 - 14:03:32
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




Мелкий пишет:
Давайте определимся для начала, про который говорим HTML. ... Есть HTML как средство полностью видимое пользователю...
Говорим про html c ограниченными функциями, только для форматирования текста сообщений, т.е некие html-коды аналогичные bb-кодам. Естественно, эти html-теги форматирования видны пользователю при создании и редактировании сообщений, также как видны ему и аналогичные теги bb-кодов. Например,
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. // вместо
  3. [size=15]текст[/size]
  4. // ставим
  5. <span style=font-size:15px>текст</span>
  6. //вместо
  7. [color=red]текст[/color]
  8. //ставим
  9. <span style=color:red>текст</span>

И т.п. И соответственно, это и храним в БД.

Мелкий пишет:
Я за вариант хранить в базе исходное сообщение (совершенно безразлично что это будет, подмножество HTML или BB), рендер этого сообщения - в мемкэше.
Уточните, что хранить в БД. Голый текст сообщения с некими метками или же текст сообщения, отформатированный, с тегами bb- или html-кодов. Имхо, есть только два варианта, нормальных, либо хранить в БД текст с bb-кодами, либо текст с html-кодами форматирования.

Про сам парсер (рендер) здесь речи не идет, речь о том, когда его запускать а когда нет. Если запускать только при создании и редактировании сообщений, то это гораздо меньшая нагрузка на сервер ина систему, чем постоянный запуск парсера при любом просмотре сообщений.

Фильтровать и валидировать bb- или html-коды (теги) форматирования надо только при создании и редактировании сообщений. А это процедура гораздо более редкая чем массовый просмотр сообщений.

(Отредактировано автором: 04 Июля, 2013 - 14:32:39)

 
 Top
Мелкий Супермодератор
Отправлено: 04 Июля, 2013 - 14:48:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




sadex пишет:
Уточните, что хранить в БД.

Исходное сообщение, написал же. То, что пользователь написал.

sadex пишет:
постоянный запуск парсера при любом просмотре сообщений.

Почему любом? Только того, которого нет в мемкэше.

А что вы хотите хранить для банального описанного мной случая с тегом CODE?
Терять исходное сообщение - писать не только рендер этого подмножества форматирования (урезанный HTML или BB), но и обратный конвертер так же нужен. Тупым реплейсом дело не ограничится - кода больше, ошибок, как следствие, гораздо больше.
(Добавление)
А нет мемкэша - ну построить пародию на мемкэш в базе. В частности, в базу рендер и писать (писать и исходное сообщение и рендер). Оверхед по месту - ну и что? Когда будете утыкаться в io - уж тогда на мемкэш ресурсов точно хватит.


-----
PostgreSQL DBA
 
 Top
sadex
Отправлено: 04 Июля, 2013 - 15:09:28
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




Мелкий пишет:
Почему любом? Только того, которого нет в мемкэше.
Это не выход, просмотров, к которым обращаются впервые, при хорошей посещаемости всегда много.
Мелкий пишет:
А что вы хотите хранить для банального описанного мной случая с тегом CODE?
Пока не знаю. Но есть варианты. Один - не каждый форум (блог, сайт) в инете для программистов, и тег code при этом не будет нужен. Другой - в HTML есть свой тег code, его и можно хранить. Форматирование кодов при этом гораздо беднее, чем здесь на форуме, но часто - сойдет. Третий - попробовать сделать функционал для кода не хуже, чем здесь, но это совсем не банальный вариант.
Мелкий пишет:
...писать не только рендер этого подмножества форматирования (урезанный HTML или BB), но и обратный конвертер так же нужен. Тупым реплейсом дело не ограничится - кода больше, ошибок, как следствие, гораздо больше.
Если хранить в БД html-коды, то без обратного конвертера вполне можно обойтись, имхо. Вот прямой коныертер и валидатор (парсер) можно делать сколь угодно мощный, и.к. он будет относителдьно редко использоваться - только при создании сообщений и только админами-модераторами, имеющими доступ к расширенным опциям форматирования текста. А обычные юзеры могут удовольствоваться простым конвертером-валидатором, т.к. доступные им опции форматирования могут быть сильно ограничены.
 
 Top
sadex
Отправлено: 12 Июля, 2013 - 05:38:51
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




В своей микро-CMS делаю пока два варианта, для экспериментов.

1. Сообщение от юзеров (комментарии и т.п.) - создаются с разметкой в bb-кодах, парсятся на сервере в html перед сохранением в БД, в html достаются из БД и выводятся. Узкое место - редактирование юзерами таких сообщений. Для этого нужно делать обратный парсинг из html в bb-разметку, но это приемлемо, с учетом относительно редких случаев редактирования. Еще кое-что. Для реализации предпросмотра на клиенте в JS делается простой парсет из bb в html разметку текста.

2. Сообщения от админа (статьи, новости и пр.), которые создаются в админке, создаются с текстовой разметкой в html. В ней же отсылаются на сервер и сохраняются в БД. В ней же, без парсинга, отображаются на сайте. Узкое место - фильтрация html от XSS и прочих атак. Но это приемлемо, с учетом того, что админка доступа админу но не хакерам, и админ свой сайт атаковать не будет.
 
 Top
DeepVarvar Супермодератор
Отправлено: 12 Июля, 2013 - 16:25:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Ох, сколько воды...
Все же просто.

Храним в базе оба вида сообщений, и bb и html.
Для показа в топик выводим те, которые сохранены как html.
Это максимально увеличит скорость отдачи страницы и не будет нагружать сервер.

Если пользак отредактирует свое исходное bb-сообщение, парсим-генерируем html-разметку для html-поля и обновляем оба поля, записав туда новые bb и новые html.
Так, вместо герерации каждого сообщения в топике, мы генеримся один раз и успокаиваимся.

Оверхед хранения данных можно не учитывать, т.к. БД может хранить практически любые объемы информации.

Для тех кто одержим сокращением места в БД предлагаю наделать классов стилей вида .uppercase, .bold, .italic, .quote, .etc.. Тогда вместо <span style="blabla будет <span class="bla1 bla2 bla3

Ну и кому тут шашечки нужны вместо ехать?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB