![]() |
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]() ![]() ![]() |
|
Gold Dragon |
|
||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
Собственно вопрос...
Допустим существует стока с форматирование типа
Мне нужно обрезать строку и оставить допустим 150 символов. Как это можно сделать сохранив форматирование? Добавлено через 2 минуты и 49 секунд как-то странно создалась тема :( попробую продублировать Собственно вопрос... Допустим существует стока с форматирование типа
Мне нужно обрезать строку и оставить допустим 150 символов. Как это можно сделать сохранив форматирование? -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||
|
|||||
Photon |
|
|||
![]() Злобный программер ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 27.2.2009 Где: Таганрог Репутация: нет Всего: 12 |
Ну в голову приходит только совершенно дебильный метод: проход по строке, при обнаружении открывающего тега сохранить в массиве, что он был, если нашли такой же закрывающий - удалить из массива. Как только дошли до нужной позиции - добавляем закрывающие теги на всё, что осталось в массиве тегов
-------------------- With best regards.. |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 4 Всего: 259 |
Рекурсивная функция, которая вырезает 150 символов, смотрит нету ли в них тегов, отрезает от изначальной строки и прибавляет к конечной еще кусок длиной в "длина тегов". И так пока текст кроме тегов не станет 150 символов.
После чего надо пробежаться и закрыть все теги. |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
а примерчик можно, а то что-то не въеду
![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ArchNix |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 18.4.2010 Репутация: нет Всего: 1 |
Примерчик
![]()
|
|||
|
||||
brother79 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: нет Всего: 6 |
1) Тупо отсчитываешь 150 символов, пропуская встретивиеся теги.
2) Если последний тег не закрытый, то 2 вар-та есть, либо закрыть самому, либо обрезать весь |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
ArchNix, попробую что за код...
![]() brother79, это не выход. Может быть куча вложенных тегов которые не закроются. И тогда весь сайт поплывёт -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
brother79 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: нет Всего: 6 |
Да, кстати, они же могут быть вложенные. Ну тогда считай открывающиеся и закрывающиеся 1) пиши полноценный парсер 2) сделай что-то типа
Далее в $m уже будут выделены отдельно все теги и текст между ними, останется только пройтись по этому массиву, считая символы и запоминая какие теги открываются и закрываются, скажем добавляя их в другой массив и удаляя из него при закрытии, а в конце, те, что не удалённые - закрыть и удалить из массива. Тут правда конец строки не учитывается, надо или регулярку усложнять или на всякий случай в конце добавить фиктивный тег перед разбором Это сообщение отредактировал(а) brother79 - 20.4.2010, 05:09 |
||||
|
|||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
в общем начал колдовать.. Но столкнулся с ещё одной бедой.. А если есть таблица? Тут не только нужно считать теги но и структуру считать.. В общем ужас
![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
SickFxck |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 16.4.2010 Репутация: 1 Всего: 1 |
Gold Dragon, какая разница — таблица у тебя или что-то другое? Какой ты алгоритм сам для себя выбрал?
|
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
разница есть, например, если используются colspan или rowspan. Или что-то типа <col> у которого нет </col>
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 4 Всего: 259 |
Все теги имеют закрывающий тег. То, что для некоторых его можно не писать - это послабляющий фактор, но никак не мешает тебе его закрыть. Добавлено через 2 минуты и 6 секунд Черт, подумал и понял проблему... То есть выкусил типа
И по логике, получается, что col надо закрыть ![]() Сложно... Чуть ли не парсер писать надо. |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
вот именно, писать парсинг... :( ну или сделать ограничения не теги
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
brother79 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: нет Всего: 6 |
Если у тебя документ корректный - то ты знаешь, какие теги должны иметь закрывающийся, а какие нет, например <br>, если же какой-то м.... пишет не закрытый <td> или ещё чего, ты на это универсальную прогу не придумаешь. Я бы предложил - нормальный код парсить или делать препроход и закрывать те же <td> перед <tr> |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
я пишу модуль вывода краткого содержимого старей/новостей для CMS. И поэтому модуль будут использовать как угодно и где угодно...
скорее всего нужно писать с простого и по мере новых версий вводить новые теги.. другого выхода пока не вижу. Пока будут получаться неоправданные затраты Это сообщение отредактировал(а) Gold Dragon - 20.4.2010, 11:57 -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Тексты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |