Forum Webscript.Ru

Программирование => PHP => Тема начата: Lion от 24 Декабря 2001, 22:20:24

Название: Таблица расползается...
Отправлено: Lion от 24 Декабря 2001, 22:20:24
Пишу вот скрипт комментариев и вопрос возник: А че делать если юзер введет что то типа пары сотен букв "a", при таком развитии событий таблица расползатся далего-далеко за экран. Как бы это разбить на определенное кол-во символов и что б читаемость не пострадала ? Или у самой таблицы как то можно нерасползаемость задать ?
Название: Таблица расползается...
Отправлено: Макс от 24 Декабря 2001, 23:31:37
Уже в третий раз сюда эту функцию пишу:

function break_long_words($source_text,$lng)
{
   $regExp=\'/(\\S{\'.$lng.\',})/ei\';
   $res_text=preg_replace($regExp,"wordwrap(\'\\\\1\',$lng,\'\\n\',1)",$source_text);
   return $res_text;
}
Название: Таблица расползается...
Отправлено: Lion от 24 Декабря 2001, 23:35:49
А если какой то зверь введет строку которая будет без пробелов и длинной больше $lng ?
Название: Таблица расползается...
Отправлено: Stek от 24 Декабря 2001, 23:36:32
$lng - допустимиое колличество символов ?
Название: Таблица расползается...
Отправлено: Lion от 24 Декабря 2001, 23:41:03
Приведите кто то пример, как вырезать строку(без пробелов) если она длиннее длинны $lng ?
Название: Таблица расползается...
Отправлено: ThE0ReTiC от 25 Декабря 2001, 00:51:59
Lion
?
$str = \'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\';
$lent = 12;
$steps = ceil(strlen($str)/$lent);
echo\'\';
for($step=0;$step<$steps;$step++)
{
$result_string = substr($str,$step*$lent,$lent);
$perm_lentb = strlen($result_string);
echo\'\';

}
echo\'
\'.$step.\'\'.$result_string.\'\'.$perm_lentb.\'
\';
?>
Название: Таблица расползается...
Отправлено: Макс от 25 Декабря 2001, 00:53:59
$text="lksjdlkjljдвлаоповадлподвлаодлпо";
echo break_long_words($text,5);

$lng - по сколько символов разбивать то есть в данном случае будет:
lksjd
lkjlj
двлао
повад
лподв
лаодл
по
то есть по 5 символов разобьет
Цитировать
Приведите кто то пример, как вырезать строку(без пробелов) если она длиннее длинны $lng ?
А зачем вырезать, разбей этой функцией и все.
Название: Таблица расползается...
Отправлено: ThE0ReTiC от 25 Декабря 2001, 00:58:38
А самому интересеней. Я, например, написал мульти конвертер из одной системы исчисления в другую, а через 20 минут нашел готовые функции В РНР. Баклан. Но все равно приятно, что смог сам сделать. Заодно и школьную математику вспомнил. :)
Название: Таблица расползается...
Отправлено: Lion от 25 Декабря 2001, 01:15:06
Цитировать
то есть по 5 символов разобьет


function break_long_words($source_text,$lng)
{
   $regExp=\'/(S{\'.$lng.\',})/ei\';
   $res_text=preg_replace($regExp,"wordwrap(\'\\1\',$lng,\'\\n\',1)",$source_text);
   return $res_text;
}

$a="PROVERKAV ERKAVERKAT ESTIROVANUE GAGFAGAGAGA";

echo break_long_words($a,8);

Выводит:
PROVERKAV ERKAVERKAT ESTIROVANUE GAGFAGAGAGA

Почему то не работает :(
Название: Таблица расползается...
Отправлено: ThE0ReTiC от 25 Декабря 2001, 01:34:09
Ха. А мое работает. :)
Название: Таблица расползается...
Отправлено: ThE0ReTiC от 25 Декабря 2001, 01:36:45
Как вариант, можно воспользоваться wordwrap($string,$symbols_in_string);
Название: Таблица расползается...
Отправлено: от 25 Декабря 2001, 07:51:24
Я считаю, что лучше задать максимальное количество знаков в слове, т.к. длинные строки пишут только "кибрехулиганы", поэтому обрезай все лишнее....
Меньше будет рекламы на динамические страницы.
Лично я режу, а не  создаю переносы.
Название: Таблица расползается...
Отправлено: ThE0ReTiC от 25 Декабря 2001, 10:14:09
2Unregistered :
Ха. А как можно по твоему угадать максимальную длину слова при, например, полнотекстовом поиске по какой-нибудь специфичной базе? Например по базе лекарственных препаратов?
Название: Таблица расползается...
Отправлено: Макс от 25 Декабря 2001, 19:18:06
Цитировать
Почему то не работает

Сори, перед перед единицей 2 слеша должно быть.
вот здесь
$res_text=preg_replace($regExp,"wordwrap(\'\\\\1
\',$lng,\'\\n\',1)",$source_text);

Что-то форум двойные слешт обрезает.


Цитировать
Ха. А мое работает

Ха, мое тоже работает :D
Название: Таблица расползается...
Отправлено: Макс от 25 Декабря 2001, 20:46:38
Цитировать
Ха, мое тоже работает
Правда не совсем мое. Эту функцию я полгода назад спер с одно мессаги в fido7.ru.php :)
Название: Таблица расползается...
Отправлено: Lion от 26 Декабря 2001, 15:16:34
Дайте еще пожалуйста примерчик, как можно убить строку если она имеет больше $n символов и не содержит пробелов ?
Название: Таблица расползается...
Отправлено: ThE0ReTiC от 26 Декабря 2001, 15:21:01
А что есть n? Чем тебя мой пример не устроил?
Название: Таблица расползается...
Отправлено: Lion от 26 Декабря 2001, 15:35:20
Твой пример просто разбивает строку, а мне надо что бы если кто то введет:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

что б оно вырезалось из сообщения.
Название: Таблица расползается...
Отправлено: ThE0ReTiC от 26 Декабря 2001, 15:44:38
А. Подумаю.
Название: Таблица расползается...
Отправлено: Макс от 26 Декабря 2001, 17:35:41
Вроде так:

$a ="hj h llllllllllll k";
$b=preg_replace("/(\\\\S){4,}/is","",$a);
echo $b;

4 - максимальное количество символов.
Название: Таблица расползается...
Отправлено: ThE0ReTiC от 26 Декабря 2001, 17:45:23
$a ="this is my preferences. I love this Game!!!";
$b=preg_replace("/(\\S){4,}/is","",$a);
echo $b;

Не работает.
Название: Таблица расползается...
Отправлено: ThE0ReTiC от 26 Декабря 2001, 17:54:05
$a ="this is my preferences. I love this Game!!! Myyy aaaaanda";
$b=preg_replace("/(\\S){4,}/is","",$a);
$c = ereg_replace("[a-fA-F]{4,}","",$a);
echo$c;

Вот это вроде работает.
Ессно можо добавить и буквы.
Название: Таблица расползается...
Отправлено: Макс от 26 Декабря 2001, 18:18:49
Цитировать
Не работает.
А что не работает?
Правда лучше наверное

$a ="this is my preferences. I love this Game!!!";
$b=preg_replace("/(\\w){5,}/is","",$a);
echo $b;
Название: Таблица расползается...
Отправлено: ThE0ReTiC от 26 Декабря 2001, 18:28:04
2Макс :
Результат работы наших выражений над фразой:
$a ="this is my preferences. I love this Game!!! Myyy aaaaanda";

Твой сверху, мой снизу.
:
this is my . I love this Game!!! Myyy
this is my preferences. I love this Game!!! Myyy nda
Название: Таблица расползается...
Отправлено: ThE0ReTiC от 26 Декабря 2001, 18:46:37
Задачка оказалась несколько хитреее, чем я думал. Мое тоже не пашет. Подумаю еще.
Название: Таблица расползается...
Отправлено: Макс от 26 Декабря 2001, 18:48:17
Ну так правильно, мой вырезает участки строки более N символов и не содержащих пробелов. Поэтому и были удлены preferences и aaaaanda

А твой код только повторяющиеся символы (то есть "aaaaa");
Название: Таблица расползается...
Отправлено: Макс от 26 Декабря 2001, 18:51:31
Цитировать
Задачка оказалась несколько хитреее, чем я думал. Мое тоже не пашет. Подумаю еще.

RegExp у тебя не правильный
[a-fA-F]{4,} - сначало берется один символ (A-Fa-f) и ищется его повторения (то есть строки типа aaaaaa bbbbbb сссссс и т.д.)
ИМХО мой путь (через \\w ) более правильный
Название: Таблица расползается...
Отправлено: ThE0ReTiC от 26 Декабря 2001, 18:53:56
Я уже понял. Он не вырезает повторяющиеся символы, а отрезает все последовательности из 5 букв и более.
Название: Таблица расползается...
Отправлено: ЖеньКа от 11 Мая 2002, 00:46:17
ТОВАРИЩИ СПАСИТЕ ХТО КАК МОЖЕТ :))))))


function word_wrap($s,$n,$br) {
$len=strlen($s);
$i=$n;
$m=substr($s,0,$n);
while($i<$len) {
$m.=$br.substr($s,$i,$n);
$i+=$n;
}
return $m;
}

 $CONTENT = word_wrap(addslashes(htmlspecialchars(trim($CONTENT))), 20, "
");

Я хотела бы что бы слова длинее 20 букв принудительно разделялись.
Это и получается.
Но в добавок к этому теперь вообще всё сообщение (читай контент) становится в длину не больше 20 символов, после которых принудительный брекет.. Что мне конечно же не надо.. Как сделать что бы было верно?
Название: Таблица расползается...
Отправлено: Макс от 11 Мая 2002, 00:59:40
У меня все работает. Может глюк какой-то. Какая версия?
Название: Таблица расползается...
Отправлено: ЖеньКа от 11 Мая 2002, 01:03:30
Макс PHP Version 4.1.2 .....
Название: Таблица расползается...
Отправлено: Dm от 11 Мая 2002, 01:07:54
ЖеньКа
а стандартная функция не поможет? начиная с 4.1.1 уже бага нет. или из чата php.spb.ru:

function mywordwrap($s,$n,$br) {
   $len=strlen($s);
   $i=$n;
   $m=substr($s,0,$n);
   while($i<$len) {
      $m.=$br.substr($s,$i,$n);
      $i+=$n;
   }
   return $m;
}
Название: Таблица расползается...
Отправлено: ЖеньКа от 11 Мая 2002, 01:09:52
Dm Дим! только что пробовали! Получается тот же Баг, я вот ставлю равным 20 разырв слова, да? А скрипт в итоге делит всё всё всё подряд по 20 не обращая внимания ни на то что слова короче, ни на то, что я вообще то другого хотела..
Название: Таблица расползается...
Отправлено: Макс от 11 Мая 2002, 01:28:52
ЖеньКа
А в функцию вставь всякие echo, посмотри, на каком этапе теряется текст.
Типа такого:

function word_wrap($s,$n,$br) {
$len=strlen($s);
echo "len = $len\\n";

$i=$n;
$m=substr($s,0,$n);
echo "m=$m\\n";
while($i<$len) {
$m.=$br.substr($s,$i,$n);
echo "m=$m\\n";
$i+=$n;
echo "i=$i\\n";

}
echo "m=$m\\n";
return $m;
}
Название: Результат, спасибо DM :)
Отправлено: ЖеньКа от 11 Мая 2002, 02:07:25

function worlds($s,$n,$m) {
    $s = explode(" ", $s);
    for($i=0; $i < sizeof($s); $i++)
        if(strlen($s[$i])>$n) { $s[$i] = wordwrap($s[$i], $n, $m, 1); }
    $s = implode($s, " ");
    return $s;
}
$CONTENT = worlds(addslashes(htmlspecialchars(trim($CONTENT))), 60, "
");


УРА!
Название: Таблица расползается...
Отправлено: Boxa от 26 Февраля 2005, 09:05:21
Спасибо !
Название: Таблица расползается...
Отправлено: pahal от 01 Марта 2005, 14:31:45
А можно и ещё довольно интересную функцию использовать

function spy($arg,$len){
$str="";
$mass=split(" ",$arg);
foreach($mass as $key => $value){
   $a="";
   if(strlen($value)>$len){
      for($i=0; $i         $a=substr($value,$i,$len);
         $str.=$a." "."­";
         $a="";
      }
   }
    else{
       $str.=$value." ";
     }
}
return $str;
}

довольно полезная
Название: Таблица расползается...
Отправлено: pahal от 01 Марта 2005, 14:34:05
Похерели знак


function spy($arg,$len){
$str="";
$mass=split(" ",$arg);
foreach($mass as $key => $value){
   $a="";
   if(strlen($value)>$len){
      for($i=0; $i         $a=substr($value,$i,$len);
         $str.=$a." "." & shy ;";
         $a="";
      }
   }
    else{
       $str.=$value." ";
     }
}
return $str;
}
Название: Таблица расползается...
Отправлено: AlieN от 28 Марта 2006, 20:42:51
Цитировать
ЖеньКа:
function worlds($s,$n,$m) { $s = explode(" ", $s); for($i=0; $i < sizeof($s); $i++)if(strlen($s[$i])>$n) { $s[$i] = wordwrap($s[$i], $n, $m, 1); } $s = implode($s, " "); return $s; } $CONTENT =worlds(addslashes(htmlspecialchars(trim($CONTENT)) ), 60, "
");



УРА!



а теперь новая загадка: необходимо не трогая HTML-код сделать тоже самое :)