imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 20.11.2004, 03:44     # 1
Boxa
Junior Member
 
Аватар для Boxa
 
Регистрация: 23.11.2003
Адрес: Инет
Сообщения: 130

Boxa Известность не заставит себя ждатьBoxa Известность не заставит себя ждать
Exclamation Превью текста... Грамотно "отрезать" кусок...

Есть статья, эта статья публикуется в новостях, нужно чтобы статья публиковалась не полностью, а например первые 500 символов. substr() не катит, т.к. текст может модержать теги. Чистить на теги тоже не вариант, они нужны. Даже не знаю че делать. То ли считать каждый открывающи1йся тег, то ли регулярку писать... Может кто сталкивался?
Boxa вне форума  
Старый 20.11.2004, 12:12     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
1. Теги не нужны. Это миф.
2. Если их всё же оставить, то неизбежно прийдется закрывать

Pahan-Hubbitus в свое время решал похожую задачу. Был вариант с внедрением iframe'ов в страницу. В таком случае все незакрытые теги закроет браузер пользователя.
RaZEr вне форума  
Старый 20.11.2004, 13:08     # 3
Boxa
Junior Member
 
Аватар для Boxa
 
Регистрация: 23.11.2003
Адрес: Инет
Сообщения: 130

Boxa Известность не заставит себя ждатьBoxa Известность не заставит себя ждать
1. не тебе решать нужны ли теги при отоброжении или нет =) Это решает заказчик.

А вообще все, как я понял, упирается в регулярку. Может кто подкинуть. а то я пока не очень в них шарю...
Boxa вне форума  
Старый 20.11.2004, 13:17     # 4
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Цитата:
не тебе решать нужны ли теги при отоброжении или нет =) Это решает заказчик.
Умей убедить в своей правоте. Заказчик может столько нарешать, что в конечном счете тебя и обвинит в том, что получилось полное дерьмо.

По теме: рега простая /\<((\w+)|(\/\w+))[^\>]*\>/ получаешь два массива. Открытые элементы и закрытые. Далее вычитаешь массивы, и получаешь разность - т.е. все незакрытые элементы. Дописываешь в конец текста. Всё.

Последний раз редактировалось RaZEr; 20.11.2004 в 13:19.
RaZEr вне форума  
Старый 20.11.2004, 13:37     # 5
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Boxa:
А вообще все, как я понял, упирается в регулярку. Может кто подкинуть. а то я пока не очень в них шарю...
Дело в том что я действительно решал подобную задачу, как правильно заметил RaZEr, и действительно одним из универсальных решений можно считать фрейм, тогда в нем браузер сам автоматически закрывает все не закрытые теги в нужном порядке.

Но известные неудобства такого подхода всем известны, поэтому конечно лучше это делать регой, но тогда возникает немного другая проблема: в общем случае, даже если все открытые теги в порядке их открытия грамотно закрыть, то может получиться ерунда полная (например это крайне актуально с таблицами), да и потом, если подобная обрезка идет точно по количеству символов, то может получиться что обрезано будет по какому-то тегу, соответственно он появится в тексте, как "лишний" текст. Вобщем чтобы все это сделать абсолютно универсальным, для любого HTML-кода, придется писать анализатор текста, схожий с тем что имеется в браузере....
Из всего этого я сделал вывод что RaZEr отчасти прав, теги там не нужны, тоесть нужны, но отнюдь не все, и совсем не в полном объеме. Просто нужно оставить заведомо "безопасные" и "необходимые" (их набор из задачи конкретной), например <b>, <i>, <h1-6>, <u>, <a> и оставлять только их, вырезая остальные (это легко делается указанием allowable_tags в функции strip_tags). В этом случае, чаще всего вид текста практически не портится в этом маленьком куске, и в месте с тем ничего не развалится в основном документе. И закрыть их не будет никакой проблемы одной единственной регой...
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 20.11.2004, 13:49     # 6
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Если обрезая попадаем на тег, можно довольно просто это исправить.
1. Отражаем строку
2. Убираем (preg_replace) /^[^\<]*\>/
RaZEr вне форума  
Старый 20.11.2004, 14:15     # 7
Ale
Junior Member
 
Регистрация: 22.03.2004
Сообщения: 123

Ale Известность не заставит себя ждатьAle Известность не заставит себя ждать
Не проще убедить заказчика писать резюме к текстам? Это фича вполне обычная, заказчику понятная, работает лучше системы регулярок, я проверял
Ale вне форума  
Старый 21.11.2004, 01:08     # 8
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
RaZEr:
Если обрезая попадаем на тег, можно довольно просто это исправить.
1. Отражаем строку
2. Убираем (preg_replace) /^[^\<]*\>/
Если попали на тег, при обрезании, то гораздо проще просто удалить начиная с символа "<", а в твоей реге, если открывающий тег отрезали (например <table border="1" style="backgr) так и не встретится закрывающей >, поэтому она не сработает . Но дело даже не в этом, если бы только одну эту проблему нужно было решить при таком подходе...
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 21.11.2004, 11:38     # 9
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
В моей реге всё правильно. Нужно просто внимательней прочесть мой пост.
RaZEr вне форума  
Старый 22.11.2004, 12:12     # 10
Boxa
Junior Member
 
Аватар для Boxa
 
Регистрация: 23.11.2003
Адрес: Инет
Сообщения: 130

Boxa Известность не заставит себя ждатьBoxa Известность не заставит себя ждать
Спасибо пацаны сделал ! Что б я без вас делал...
Boxa вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 22:48.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.