Forum Webscript.Ru
Программирование => PHP => Тема начата: Lion от 24 Декабря 2001, 22:20:24
-
Пишу вот скрипт комментариев и вопрос возник: А че делать если юзер введет что то типа пары сотен букв "a", при таком развитии событий таблица расползатся далего-далеко за экран. Как бы это разбить на определенное кол-во символов и что б читаемость не пострадала ? Или у самой таблицы как то можно нерасползаемость задать ?
-
Уже в третий раз сюда эту функцию пишу:
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;
}
-
А если какой то зверь введет строку которая будет без пробелов и длинной больше $lng ?
-
$lng - допустимиое колличество символов ?
-
Приведите кто то пример, как вырезать строку(без пробелов) если она длиннее длинны $lng ?
-
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\'\'.$step.\' | \'.$result_string.\' | \'.$perm_lentb.\' |
\';
}
echo\'
\';
?>
-
$text="lksjdlkjljдвлаоповадлподвлаодлпо";
echo break_long_words($text,5);
$lng - по сколько символов разбивать то есть в данном случае будет:
lksjd
lkjlj
двлао
повад
лподв
лаодл
по
то есть по 5 символов разобьет
Приведите кто то пример, как вырезать строку(без пробелов) если она длиннее длинны $lng ?
А зачем вырезать, разбей этой функцией и все.
-
А самому интересеней. Я, например, написал мульти конвертер из одной системы исчисления в другую, а через 20 минут нашел готовые функции В РНР. Баклан. Но все равно приятно, что смог сам сделать. Заодно и школьную математику вспомнил. :)
-
то есть по 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
Почему то не работает :(
-
Ха. А мое работает. :)
-
Как вариант, можно воспользоваться wordwrap($string,$symbols_in_string);
-
Я считаю, что лучше задать максимальное количество знаков в слове, т.к. длинные строки пишут только "кибрехулиганы", поэтому обрезай все лишнее....
Меньше будет рекламы на динамические страницы.
Лично я режу, а не создаю переносы.
-
2Unregistered :
Ха. А как можно по твоему угадать максимальную длину слова при, например, полнотекстовом поиске по какой-нибудь специфичной базе? Например по базе лекарственных препаратов?
-
Почему то не работает
Сори, перед перед единицей 2 слеша должно быть.
вот здесь
$res_text=preg_replace($regExp,"wordwrap(\'\\\\1
\',$lng,\'\\n\',1)",$source_text);
Что-то форум двойные слешт обрезает.
Ха. А мое работает
Ха, мое тоже работает :D
-
Ха, мое тоже работает
Правда не совсем мое. Эту функцию я полгода назад спер с одно мессаги в fido7.ru.php :)
-
Дайте еще пожалуйста примерчик, как можно убить строку если она имеет больше $n символов и не содержит пробелов ?
-
А что есть n? Чем тебя мой пример не устроил?
-
Твой пример просто разбивает строку, а мне надо что бы если кто то введет:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
что б оно вырезалось из сообщения.
-
А. Подумаю.
-
Вроде так:
$a ="hj h llllllllllll k";
$b=preg_replace("/(\\\\S){4,}/is","",$a);
echo $b;
4 - максимальное количество символов.
-
$a ="this is my preferences. I love this Game!!!";
$b=preg_replace("/(\\S){4,}/is","",$a);
echo $b;
Не работает.
-
$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;
Вот это вроде работает.
Ессно можо добавить и буквы.
-
Не работает.
А что не работает?
Правда лучше наверное
$a ="this is my preferences. I love this Game!!!";
$b=preg_replace("/(\\w){5,}/is","",$a);
echo $b;
-
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
-
Задачка оказалась несколько хитреее, чем я думал. Мое тоже не пашет. Подумаю еще.
-
Ну так правильно, мой вырезает участки строки более N символов и не содержащих пробелов. Поэтому и были удлены preferences и aaaaanda
А твой код только повторяющиеся символы (то есть "aaaaa");
-
Задачка оказалась несколько хитреее, чем я думал. Мое тоже не пашет. Подумаю еще.
RegExp у тебя не правильный
[a-fA-F]{4,} - сначало берется один символ (A-Fa-f) и ищется его повторения (то есть строки типа aaaaaa bbbbbb сссссс и т.д.)
ИМХО мой путь (через \\w ) более правильный
-
Я уже понял. Он не вырезает повторяющиеся символы, а отрезает все последовательности из 5 букв и более.
-
ТОВАРИЩИ СПАСИТЕ ХТО КАК МОЖЕТ :))))))
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 символов, после которых принудительный брекет.. Что мне конечно же не надо.. Как сделать что бы было верно?
-
У меня все работает. Может глюк какой-то. Какая версия?
-
Макс PHP Version 4.1.2 .....
-
ЖеньКа
а стандартная функция не поможет? начиная с 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;
}
-
Dm Дим! только что пробовали! Получается тот же Баг, я вот ставлю равным 20 разырв слова, да? А скрипт в итоге делит всё всё всё подряд по 20 не обращая внимания ни на то что слова короче, ни на то, что я вообще то другого хотела..
-
ЖеньКа
А в функцию вставь всякие 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;
}
-
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, "
");
УРА!
-
Спасибо !
-
А можно и ещё довольно интересную функцию использовать
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;
}
довольно полезная
-
Похерели знак
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;
}
-
ЖеньКа:
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-код сделать тоже самое :)