Модераторы: Aliance, [email protected], SamDark, skyboy, MoLeX, ksnk, ksnk, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обрезать строку с форматированием 
:(
    Опции темы
Gold Dragon
Дата 17.4.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



Собственно вопрос...

Допустим существует стока с форматирование типа
Код

<h3>Уважаемые посетители, на наших страницах в апреле ... </h3>
<p align="justify">
<span style="color: #000000">&laquo;Профессиональные ОПРОСНИКИ&raquo;</span>, кого-то они направят в выборе профессии, кому-то <b>они</b> помогут оценить возможность перемен для себя!
</p>

Мне нужно обрезать строку и оставить допустим 150 символов. Как это можно сделать сохранив форматирование?

Добавлено через 2 минуты и 49 секунд
как-то странно создалась тема :( попробую продублировать


Собственно вопрос...

Допустим существует стока с форматирование типа
Код

<h3>Уважаемые посетители, на наших страницах в апреле ... </h3>
<p align="justify">
<span style="color: #000000">&laquo;Профессиональные ОПРОСНИКИ&raquo;</span>, кого-то они направят в выборе профессии, кому-то <b>они</b> помогут оценить возможность перемен для себя!
</p>


Мне нужно обрезать строку и оставить допустим 150 символов. Как это можно сделать сохранив форматирование? 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Photon
Дата 17.4.2010, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Злобный программер
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 27.2.2009
Где: Таганрог

Репутация: нет
Всего: 12



Ну в голову приходит только совершенно дебильный метод: проход по строке, при обнаружении открывающего тега сохранить в массиве, что он был, если нашли такой же закрывающий - удалить из массива. Как только дошли до нужной позиции - добавляем закрывающие теги на всё, что осталось в массиве тегов


--------------------
With best regards..
PM MAIL ICQ Skype GTalk Jabber   Вверх
smartov
Дата 17.4.2010, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 4
Всего: 259



Рекурсивная функция, которая вырезает 150 символов, смотрит нету ли в них тегов, отрезает от изначальной строки  и прибавляет к конечной еще кусок длиной в "длина тегов". И так пока текст кроме тегов не станет 150 символов.
После чего надо пробежаться и закрыть все теги.
PM MAIL   Вверх
Gold Dragon
Дата 18.4.2010, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



а примерчик можно, а то что-то не въеду smile не очень я со всякими регулярками


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ArchNix
Дата 18.4.2010, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.4.2010

Репутация: нет
Всего: 1



Примерчик  smile 
Код

$TEST =<<<HTML
<h3>Уважаемые посетители, на наших страницах в апреле ... </h3>
<p align="justify">
<span style="color: #000000">&laquo;Профессиональные ОПРОСНИКИ&raquo;</span>, кого-то они направят в выборе профессии, кому-то <b>они</b> помогут оценить возможность перемен для себя!
</p>
HTML;

$charset = "UTF-8";

mb_regex_encoding($charset);
mb_ereg_search_init($TEST, "([А-я]*)");

$r = mb_ereg_search_getregs();
do {
  $r = mb_ereg_search_regs();
  $arr[] = $r[1];
} while($r);

print_r($arr);

PM MAIL   Вверх
brother79
Дата 19.4.2010, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: нет
Всего: 6



1) Тупо отсчитываешь 150 символов, пропуская встретивиеся теги.
2) Если последний тег не закрытый, то 2 вар-та есть, либо закрыть самому, либо обрезать весь


--------------------
PM MAIL WWW   Вверх
Gold Dragon
Дата 19.4.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



ArchNix, попробую что за код... smile


brother79, это не выход. Может быть куча вложенных тегов которые не закроются. И тогда весь сайт поплывёт


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
brother79
Дата 20.4.2010, 05:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: нет
Всего: 6



Цитата(Gold Dragon @  19.4.2010,  17:13 Найти цитируемый пост)
brother79, это не выход. Может быть куча вложенных тегов которые не закроются. И тогда весь сайт поплывёт 


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

1) пиши полноценный парсер
2) сделай что-то типа 

Код

if (preg_match_all('/([^\<]*)(\<[^\>]+\>)/', $s, $m)) {
  print_r($m)
}


Далее в $m уже будут выделены отдельно все теги и текст между ними, останется только пройтись по этому массиву, считая символы и запоминая какие теги открываются и закрываются, скажем добавляя их в другой массив и удаляя из него при закрытии, а в конце, те, что не удалённые  - закрыть и удалить из массива.

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

Это сообщение отредактировал(а) brother79 - 20.4.2010, 05:09


--------------------
PM MAIL WWW   Вверх
Gold Dragon
Дата 20.4.2010, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



в общем начал колдовать.. Но столкнулся с ещё одной бедой.. А если есть таблица? Тут не только нужно считать теги но и структуру считать.. В общем ужас smile


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
SickFxck
Дата 20.4.2010, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 16.4.2010

Репутация: 1
Всего: 1



Gold Dragon, какая разница — таблица у тебя или что-то другое? Какой ты алгоритм сам для себя выбрал?
PM MAIL   Вверх
Gold Dragon
Дата 20.4.2010, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



разница есть, например, если используются colspan или rowspan. Или что-то типа <col> у которого нет </col>


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
smartov
Дата 20.4.2010, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 4
Всего: 259



Цитата(Gold Dragon @  20.4.2010,  10:12 Найти цитируемый пост)
Или что-то типа <col> у которого нет </col> 

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

Добавлено через 2 минуты и 6 секунд
Черт, подумал и понял проблему...
То есть выкусил типа
Код

<col>BlahBlah
<tr><td>Blah2


И по логике, получается, что col надо закрыть smile
Сложно... Чуть ли не парсер писать надо. 
PM MAIL   Вверх
Gold Dragon
Дата 20.4.2010, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



вот именно, писать парсинг... :( ну или сделать ограничения не теги


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
brother79
Дата 20.4.2010, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: нет
Всего: 6



Цитата(Gold Dragon @  20.4.2010,  12:00 Найти цитируемый пост)
в общем начал колдовать.. Но столкнулся с ещё одной бедой.. А если есть таблица? Тут не только нужно считать теги но и структуру считать.. В общем ужас smile 


Если у тебя документ корректный - то ты знаешь, какие теги должны иметь закрывающийся, а какие нет, например <br>, если же какой-то м.... пишет не закрытый <td> или ещё чего, ты на это универсальную прогу не придумаешь. Я бы предложил - нормальный код парсить или делать препроход и закрывать те же <td> перед <tr>


--------------------
PM MAIL WWW   Вверх
Gold Dragon
Дата 20.4.2010, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



я пишу модуль вывода краткого содержимого старей/новостей  для CMS. И поэтому модуль будут использовать как угодно и где угодно...

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

Это сообщение отредактировал(а) Gold Dragon - 20.4.2010, 11:57


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Google
  Дата 5.4.2020, 22:43 (ссылка)  





  Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.1756 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.