информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медЗа кого нас держат?Страшный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Крупный взлом GoDaddy 
 Просроченный сертификат ломает... 
 Phrack #70/0x46 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Такой вариант есть. 27.08.06 23:50  Число просмотров: 1920
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
<"чистая" ссылка>
И я уже собирался его использовать, но в последний момент решил поискать решения поизящнее.
<programming>
[Perl] Корректное "обрезание" новости. 27.08.06 19:40  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
<"чистая" ссылка>
Здравствуйте!
Возникла такая проблема. Имеется модуль новостей для сайта, который выводит на главную последние пять новостей и список новостей в архив. Естественно, если новость большая, выводить её целиком, что на главную, что в архив, не совсем рационально, поэтому я сделал банальное "обрезание" новости, примерно такое:
if (length($new) > 256) {
    $new = substr($new,0,256)."...";
}

---
Но тогда, возникла проблема следующего рода: если последняя часть новости при таком "обрезании", содержала открывающийся html-тег, то, соответственно, под этот тег уходило и все, что было за новостью.
То есть, по идее, при "обрезании" новости надо следить, чтобы все теги были закрыты. Пытался сделать это по-всякому, -- ничего не выходит.
Подскажите, пожалуйста, как это можно реализовать.
Спасибо.
Не инженерное решение 27.08.06 23:27  
Автор: ZloyShaman <ZloyShaman> Статус: Elderman
<"чистая" ссылка>
Ввести новое поле - краткое описание новости. Поле заполняется вручную оператором.
Такой вариант есть. 27.08.06 23:50  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
<"чистая" ссылка>
И я уже собирался его использовать, но в последний момент решил поискать решения поизящнее.
Hint 27.08.06 19:53  
Автор: Heller <Heller> Статус: Elderman
Отредактировано 27.08.06 19:55  Количество правок: 1
<"чистая" ссылка>
> Но тогда, возникла проблема следующего рода: если последняя
> часть новости при таком "обрезании", содержала
> открывающийся html-тег, то, соответственно, под этот тег
> уходило и все, что было за новостью.
> То есть, по идее, при "обрезании" новости надо следить,
> чтобы все теги были закрыты. Пытался сделать это
> по-всякому, -- ничего не выходит.
> Подскажите, пожалуйста, как это можно реализовать.

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

> Спасибо.
Пожалуйста :)
:). Ну, допустим, ссылка в новости. 27.08.06 20:20  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
<"чистая" ссылка>
> Во-первых, не совсем понятно каким образом втексте
> новости затесался тег. Не должно быть там тега, нет такого

> слова в русском языке.
:). Ну, допустим, ссылка в новости.

> Если все же затесался, прежде чем обрезать новость, удали
> из нее все теги простой регуляркой.
Да не хотелось бывсеудалять. Допустим, если в начале новости есть ссылка, то нет особого смысла её убирать, а вот если ссылка есть в месте "обрезания", -- придется.
Тогда вначале нужно определиться со списком разрешенных... 27.08.06 22:30  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
> > Во-первых, не совсем понятно каким образом втексте
> > новости затесался тег. Не должно быть там тега, нет
> такого

> > слова в русском языке.
> :). Ну, допустим, ссылка в новости.
>
> > Если все же затесался, прежде чем обрезать новость,
> удали
> > из нее все теги простой регуляркой.
> Да не хотелось бывсеудалять. Допустим, если в начале
> новости есть ссылка, то нет особого смысла её убирать, а
> вот если ссылка есть в месте "обрезания", -- придется.
Тогда вначале нужно определиться со списком разрешенных тегов. Если все разрешенные теги требуют наличия закрывающего тега, то проверку можно сделать достаточно просто - подсчитать открывающие и закрывающие тэги. Если их число не совпадает, удалить последние открывающие (количество взять как разность между открывающими и закрывающими). Но это подействует только в том случае, если соблюдена сложенность тегов. Если допускаются любые теги, то проблеема становится значительно сложнее и придется писать свой парсер.

Вообще задача весьма нетривиальна. Я бы все же задался вопросом: "А действительно ли так нужны теги, даже если это просто ссылки, в краткой аннотации к новости? Может быть оставить их для полной статьи"? Это вполне нормальное поведение, общепринятое по всему Нету. Ты только потеряешь время на реализацию тегов. К тому же в последнее время у пользователей закрепляется в сознании, что весь блок с кратким изложением новости является одной ссылкой. Появление внутри него сторонних ссылок введет пользователя в замешательство и посеет панику.
1






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2021 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach