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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Растяжение таблицыв IPB, по причине длинной строки 
:(
    Опции темы
Pakshin A. S.
  Дата 13.1.2006, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

Как бороться с этим?

Вот этот код работает хорошо для восклицательных знаков:
Код

 $str = $this->post['post'];
 $maxlen = 150;
 $charcount = 0;
 $result = "";
 for ($i = 0; $i < strlen($str); $i++)
 {
  $result = $result.$str[$i];
  $charcount++;
  if (($charcount == $maxlen) && ($str[$i] != " "))
  {
   $result = $result."- ";
   $charcount = 0;
  }
  else
   if ($str[$i] == " ")
    $charcount = 0;
 }
 $this->post['post'] = $result;


Но с буквами не справляется. Все получается, если уменьшить maxlen допустим до 50. Но при этом мы получаем разрывы при употреблении тэга URL...

Может кто сталкивался? как решали эту проблему?
PM   Вверх
deMike
Дата 13.1.2006, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


M.Shinoda
**


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

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



Ты имеешь введу, то, что расширяется html таблица?
PM MAIL WWW   Вверх
2man
Дата 13.1.2006, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

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



Цитата(Pakshin A. S. @ 13.1.2006, 12:08 Найти цитируемый пост)

Но при этом мы получаем разрывы при употреблении тэга URL

А что именно?


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Mal Hack
Дата 13.1.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



PM ICQ   Вверх
Pakshin A. S.
Дата 13.1.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



разделить все получается... Впринцепе реализуется в вышеуказанном коде та же функция wordwrap
просто разделать вот такое нельзя на форуме:

{IMG}оченьбольшаяссылканакртинку{/IMG}
{URL=оченьбольшаяссылка}оченьбольшойтекст{/URL}

Ведь через wordwrap все убъется и получится неверная информация...
PM   Вверх
Mal Hack
Дата 13.1.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Код

   function TMPL_Parser_BB_link( $href , $discription )
    {
     $style = "content";

     if( empty( $discription ) )
      {
       $discription = ( strlen( $discription ) < 80 ) ? $href : substr( $href , 0 , 80 ) . "..." ;
       return "<a href='" . $href . "' class='" . $style . "'>" . $discription . "</a>";
      }
     else
      {  return "<a href='" . $href . "' class='" . $style . "'>" . $discription . "</a>";  }
    }


Вот так я обрубал длинную ссылку (описание), при этом сама ссылка оставалась какой надо.
PM ICQ   Вверх
Pakshin A. S.
Дата 13.1.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вот тут пока нацарапал код на Delphi... похже на PHP переведу...

Код

function ParseText(str: string): string;
(*Разделителем между словами считать пробел*)
const
 maxlen = 30; // длина слова
var
 i: integer;
 charcount: integer; // счетчик количества символов в текущем слове
begin
 Result:='';
 charcount:=0;
 i:=1;
 while (i <= Length(str)) do
  begin
   // пропускаем тэг [IMG]
   if (LowerCase(Copy(str, i, 5)) = '[img]') and (Pos('[/img]', LowerCase(Copy(str, i+5, Length(Str) -i))) <> -1)
    then
     begin
      charcount:=0;
      Result:=Result + '[img]';
      inc(i, 5);
      while (LowerCase(Copy(str, i, 6)) <> '[/img]') and (i <=Length(str) - 6) do
       begin
        Result:=Result + str[i];
        inc(i);
       end;
      Result:=Result + '[/img]';
      inc(i, 5);
     end
    else
     // пропускаем начинку остальных тэгов
     if (LowerCase(Copy(str, i, 4)) = '[url') or (LowerCase(Copy(str, i, 6)) = '[color') // дописываем остальные тэги...
        or
        (LowerCase(Copy(str, i, 5)) = '[/url') or (LowerCase(Copy(str, i, 7)) = '[/color')
      then
       begin
        charcount:=0;
        while (str[i] <> ']') and (i <= Length(str)) do
         begin
          Result:=Result + str[i];
          inc(i);
         end;
        Result:=Result + str[i];
       end
      else
       // работаем с основным текстом
       begin
        inc(charcount);
        Result:=Result+str[i];
        if (charcount = maxlen) and (str[i+1] <> ' ') and (str[i] <> ' ')
         then  // Если слово превышает допустимую длину, то грубо разделяем его
          begin
           charcount:=0; // Если даже слово не кончилось, то мы все-равно начинаем новую последовательность/серию
           Result:=Result + ' ';
          end
         else
          if str[i] = ' ' // Слово кончилось
           then
            charcount:=0;
       end;
   inc(i);
  end;
end;

PM   Вверх
Mal Hack
Дата 13.1.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Pakshin A. S. я же выше тебе все написал. А сами картинки через preg'и достаются.
PM ICQ   Вверх
Pakshin A. S.
Дата 13.1.2006, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Mal Hack @ 13.1.2006, 15:58 Найти цитируемый пост)

я же выше тебе все написал.

Я и так знал...

Просто туту все-равно придется разбирать текст, выделяя все тэги и информацию из них. Я ошибаюсь?
PM   Вверх
Pakshin A. S.
Дата 13.1.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



вот на PHP вроде перевел..

Код

function parsetext($str)
{
    $maxlen = 30;
    $result = "";
    $i = 0;
    $charcount = 0;
    while (i <= strlen($str)) do
    {
        if ((lolower(strcopy($str, $i, 5)) == "[img]") && (Pos('[/img]', tolower(strcopy($str, $i+5, strlen($str) - $i))) != -1))
        {
            $charcount = 0;
            $result = $result."[img]";
            $i = $i + 5;
            while ((tolower(strcopy($str, $i, 6)) != "[/img]") && ($i <= strlen($str) - 6)) 
            {
                $result = $result.$str[$i];
                $i++;
            }
            $result = $result."[/img]";
            $i = $i + 5;
        }
        else
        {
            if (
                (tolower(strcopy($str, $i, 4)) == "[url") || (tolower(strcopy($str, $i, 6)) == "[color")
                ||
                (tolower(strcopy($str, $i, 5)) == "[/url") || (tolower(strcopy($str, $i, 7)) == "[/color")
               )
            {
                $charcount = 0;
                while (($str[$i] != "]") && ($i <= strlen($str)))
                {
                    $result = $result.$str[$i];
                    $i++;
                }
                $result = $result.$str[$i];
            }
            else
            {
                $charcount++;
                $result = $result.$str[$i];
                if (($charcount == $maxlen) && ($str[$i+1] != " ") && ($str[$i] != " "))
                {
                    $charsount = 0;
                    $result = $result." ";
                }
                else
                    if ($str[$i] == " ")
                        $charcount = 0;
            }
        }
        $i++;
    }
    return $result;
}

PM   Вверх
Mal Hack
Дата 13.1.2006, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Блин, Андрюх, ну нафига так сложно. Все уже есть выше, надо только объектный код оттуда переписать на тструктурный и реглярку выше добавить.
В ПХП очень много встроенно того, что в Делфи том же руками придется писать.
PM ICQ   Вверх
Pakshin A. S.
Дата 14.1.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ok... Придется еще раз перечитать документацию, а то пока не вижу способа... smile smile
PM   Вверх
Pakshin A. S.
Дата 18.1.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вот сообразили рабочий вариант:
Код

        //-------------------------------------------------
        // Break long "words"
        // © 2006, Stranger, pforum.com.ru
        //-------------------------------------------------

        $str = $this->post['post'];
        $maxlen=80;
        $counter=0; 
        $i=0;
        $l=strlen($str);
        $divider="&nbsp;";
        //------------ lets go!!!
        while ($i < $l)
        {
         //------- tag exceptions - limitation of parsing
            if ($str[$i] == '<')
             while ($str[$i] != '>') 
                    $i++;
            //------- end of tag exceptions
            else
            {
             if ($str[$i]!=' ') 
                    $counter++; 
                else 
                    $counter=0;
                if ($counter==$maxlen)
               {
                        $counter=0;
                    if ($str[$i+1]!=' ') 
                        {
                            $j=$i;
                            while (($str[$j] != ';') && ($j - $i != 4))
                                $j++;
                            if ($j - $i < 4)
                                $i=$j + 1;
                            $str = substr($str, 0, $i).$divider.substr($str, $i++);
                            $l+=strlen($divider);
                        }
               }
         }
            $i++;
         }
        //------------ that's all.
        $this->post['post'] = $str;


Есть возможность ускорить/усовершенствовать?
PM   Вверх
Mal Hack
Дата 18.1.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Андрюха, блин, ну ПХП не делфи, тут уже многое встроено. Достаточно написать:
Код
<?
 $tmpl = "[url]kjflllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll[/url] [url=sjkdfhsjkhfjks]58888888888888888hfgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg8888888888888888888888888888888888888888888888888888888888888888888888[/url]";

     $tmpl = preg_replace( "#\[url\](.+?)\[/url\]#ie" ,
                             "TMPL_Parser_BB_link( \"\\1\" , \"\" )" ,
                             $tmpl );
     $tmpl = preg_replace( "#\[url\s*=\s*(\S+?)\s*\](.*?)\[\/url\]#ie" ,
                             "TMPL_Parser_BB_link( \"\\1\" , \"\\2\" )" ,
                             $tmpl );

   function TMPL_Parser_BB_link( $href , $discription )
    {
     if( empty( $discription ) )
      {
       $discription = ( strlen( $href ) < 80 ) ? $href : substr( $href , 0 , 80 ) . "..." ;
       return "<a href='" . $href . "'>" . $discription . "</a>";
      }
     else
      {  
       $discription = ( strlen( $discription ) < 80 ) ? $discription : substr( $discription , 0 , 80 ) . "..." ;
       return "<a href='" . $href . "'>" . $discription . "</a>";  
      }
    }

    print $tmpl;
?>    


$tmpl - где весь твой текст.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




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


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

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