Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Урезание строки до определенной длинны 
V
    Опции темы
Staind
Дата 21.1.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ситуация такая:
Есть вывод новостей. На данный момент они как выводились так и выводятся. Мне нужно, чтобы при достижение определеной длинны, новость обрывалась и дальше следовала ссылка "подробнее" на полную верссию новости.
Все было бы здорого:
Я считаю символы функцией strlen и далее урезаю до нужного мне размера функцией substr. Косяк в том, что если этой самой строке идет тэг на изображение (в данном случае у меня смайлики реализованы), то длинна строки получается не совсем "честная". А если еще функция substr "обрежет" неправильно, то есть предположим идет:

Код

cxawdwadwafwafwafwa<img src=''>dwadwadwadawdwadaw


получиться, предположим, такая шняга:

Код

cxawdwadwafwafwafwa<img dwadwadwadawdwadaw

Т.е. один открывающий тэг - и верстка сайта летит к чертям.
Т.е. проше говоря, мне нужно, чтобы при обрезании:
1) Скрипт не считал длинну строки вместе с тэгами
2) При обрезании, если встретится любой тэг - аккуратно его "обойти" и его длунну не считать

По поводу первого пункта: Применяю функцию strip_tags и потом strlen и высчитываю реальную длинну строки.
Вот теперь ломаю голову над вторым пунктом. Помогите пожалуйста smile
--------------------
Ничто так не раздражает человека, как просьба успокоиться
PM MAIL WWW ICQ   Вверх
Staind
Дата 21.1.2008, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Так написал мини скрипт вида:
Код

//Цикл от первого символа до конечного
for ($i=0 ; $i<=strlen($novost) ; $i++)
{
//Если начинается html тэг, то "блокируем" обризание
    if ($novost[$i]=="<") $hold = "yes";
//Если тэг заканчивается, снимаем блокировку
    if ($novost[$i]==">") $hold = "no";
//Если позиция символа не превышает определенного числа и отсутствует блокировка ИЛИ блокировка есть, то пишем символ в новую строку
    if (($i<=150 && $hold == "no") || $hold == "yes") $new .= $novost[$i];
//Если превышен лимит символов и снята блокировка, то обрываем все и пишем ссылку "подробнее"
    if ($i>150 && $hold == "no") { $new .= "<a href='#'> подробнее</a>"; break 1; }
}

Осталось только сделать так, чтобы скрипт учитывал, если в строке имеется тэг (пример: размером 7 символов), то его не учитывать при счете - не могу догнать как сделать.

Это сообщение отредактировал(а) Staind - 21.1.2008, 23:04
--------------------
Ничто так не раздражает человека, как просьба успокоиться
PM MAIL WWW ICQ   Вверх
Staind
Дата 21.1.2008, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Все, разобрался, всем спасибо за помощь smile
--------------------
Ничто так не раздражает человека, как просьба успокоиться
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




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


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

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