![]() |
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]() ![]() ![]() |
|
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 12 Всего: 386 |
Gold Dragon, Есть мысль - заставить юзера(юзеровый броузер) самого впилить все нужные теги...
Новости - это кусочки откопипащеных html'ей? Тогда нужно просто вставить этот текст в какой-то фрейм в html документе, на клиентской стороне у самого "редактора", а потом брать с собой на сервер то, что броузер уже успел "открыть-закрыть". Просто у броузера уже есть механизм исправления корявого кода и им вполне можно пользоваться ![]() C кодом на сервере нужно, конечно, проделать много дополнительных телодвижений - stripTags для непонятных тегов, очистка понятных тегов от странного и лишнего форматирования и протчий клининг... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
SickFxck |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 16.4.2010 Репутация: 1 Всего: 1 |
Я до сих пор не вижу проблемы. В данном случае вы просто неправильно "откусили" вот и всё. "Кусать" надо до тех пор, пока не закроются все теги, попавшие в текст, длиной 150 символов. Да, строка может получиться длиннее 150-ти символов, но зато тут виден какой-то алгоритм. Ещё раз спрашиваю: какой алгоритм выбрал тредстартер? Добавлено через 3 минуты и 45 секунд Сложнее всего ответить на вопрос: «а что вообще такое «подстрока гипертекста»? Что вообще вы хотите увидеть, попытавшись получить «150 символов таблицы»? Я смысла в этом вообще вижу мало. |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 4 Всего: 259 |
Очень класно. Обрежем 150 символов, но не 150 символов. Соответствие решения техзаданию даже близко не валяется. А я вижу. Раз просят 150, надо сделать все, чтобы было максимально близко, а не делать как получится, потому что так удобнее |
|||
|
||||
SickFxck |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 16.4.2010 Репутация: 1 Всего: 1 |
smartov, ответь на вопросы:
А уже только потом можно будет поговорить о реализации. |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 4 Всего: 259 |
SickFxck, мне задание очевидно - его бизнес логика сродни тому, почему у нас на винграде при нажатии кнопки "быстрая цитата" скрипт вставляет цитируемый текст без форматирования, а должен бы с ним. Если у тебя еще есть вопросы - задавай их ТС, а не мне.
|
|||
|
||||
SickFxck |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 16.4.2010 Репутация: 1 Всего: 1 |
То, что ты не можешь точно описать, не существует. Тогда просьба не оценивать чужие предложения на соответствие "техзаданию" автора: |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 4 Всего: 259 |
||||
|
||||
Gold Dragon |
|
||||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
Извините. был занят... Может я не совсем правильно всем объяснил... вот на примере
есть примеры следующего контекста
Сам текст может иметь любые стили форматирования. И как видно, нужно не только закрывать теги, но и "научить" парсер в каком порядке их закрывать. И строка само собой получится более 150 символов.. Нужно сохранять 150 текста ![]() Добавлено через 2 минуты и 48 секунд интересный вариант предложил brother79, осталось понять логику как это реализовать -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||||
|
|||||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 8 Всего: 401 |
Если в лоб, можно попробовать тупо вырезать без учета тегов (напр., регуляркой типа '/([^<>](<[^<>]*>)*){0,150}/s'), а на результат натравить какой-нибудь tidy_repair_string (пусть сам чинит покоцаную разметку;) и из результата вырезать всё между <body>...</body>. Возможно, как вариант, вместо Tidy - DOMDocument::loadHTML (не проверял, поэтому не уверен).
Но вообще подход рискованный. Если это для новых статей/новостей, которые вводятся через WYSIWYG-редактор, лично я бы сделал как-нибудь так: для краткого содержания завел бы отдельное поле (тоже WYSIWYG'овое) и по достижении нужного лимита значением innerText.length/textContent.length основного поля копировал бы innerHTML основного поля туда яваскриптом, оставив редактору новости возможность вручную поменять его на что-то более осмысленное (напр., заменить обрезок таблицы на краткую аннотацию к ней). -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
SickFxck |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 16.4.2010 Репутация: 1 Всего: 1 |
Через стек просто делается:
|
|||
|
||||
SelenIT |
|
||||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 8 Всего: 401 |
Кстати,
справедливо для XML (включая XHTML как application/xhtml+xml), но не для HTML (включая XHTML как text/html). В HTML для пустых (принципиально не имеющих содержимого) тегов закрывающий тег именно что запрещен. И <col> - как раз один из таких тегов;) По сабжу, в первом приближении работает и такое:
Закрывает всё вроде как надо (проверил на примерах из топика). Правда, нужна поддержка Tidy на сервере и кодировка utf-8 (с cp1251 у меня не получилось). И сбитые rowspan/colspan таблиц не лечит (в принципе, пустяк, таблица-то закрыта, вёрстка дальше не поплывёт)... Это сообщение отредактировал(а) SelenIT - 27.4.2010, 17:57 -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
||||
|
|||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
что такое Tidy?
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
SickFxck, твой код практически отлично работает.. не пробовал на таблицах, но с другими элементами вроде пащет.. Правда <IMG> не проверил... А так всё открывается и закрывается..
НО(!) - задаваемый размер не соответствует реальному тексту - не учтено всякие специальные символы типа « SickFxck, можешь пояснить что и как делается в коде? что-то я запутался ![]() вот для примера код
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
SickFxck |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 16.4.2010 Репутация: 1 Всего: 1 |
Скорее всего это одна и та же проблема. Вечером выложу исправленный вариант, если ничего другого не найдёшь. Добавлено через 53 секунды А если ты работаешь с UTF-8, то там нужно mb-функции использовать. |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
SickFxck, прокомментируй код.. Хочу разобраться
![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Тексты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |