|
|
|
| Всем привет. Хочу услышать критику по поводу моей ф-ции, которая режет строку по заданному размеру не урезая при этом слово и в добавок ставит троеточие если в исходной строке больше символов чем мы обрезаем.
function strok_replace($str='',$length=0){
$exp_str = explode(" ",$str);
$plength = 0;
$j = 0;
for($i=0;$i<count($exp_str);$i++){
$j++;
$nbsp = ($j!=count($exp_str))?" ":"";
$plength += mb_strlen($exp_str[$i],'UTF-8')+1;
if($plength <= $length){
$strok .= $exp_str[$i].$nbsp;
}else{
$strok = $strok.'...';
break;
}
}
return $strok;
}
|
| |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 02:37)
| |
<?
function string_replace($string,$length=256)
{
for($i=$length;$string[$i] == ' ';$i++)
if($string[$i]=='\0')
return $string;
$string[$i++].='.';
$string[$i++].='.';
$string[$i++].='.';
$string[$i].='\0';
return $string;
}
?>
|
только не надо говорить, что это шлак - сам знаю,но - как вариант покатит:) | |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 02:37)
| |
<?
function cut($string,$len){
$count = strlen($string); //определяем длинну строки
$index = strpos($string,' ',$len); #определяем первую позицию пробела, после указанной позиции
if($len > $count || !$index) return $string; //если указанная длинна больше длинны строки, или не найден пробел после заданной позиции, возвращаем строку
return substr($string,0,$index).($index + 3 < strlen($string)?' …':' '); //обрезаем строку, если надо добавляем три точки
}
?>
|
тоже вариантик на крайний случай | |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 02:37)
| | Делаю запрос к вашей функции:
<?
echo strok_replace('Привет мой старый друг',10);
?>
|
Результат: Привет мой старый ...
Должно быть: Привет мой… | |
|
|
|
|
|
|
|
для: ONYX
(01.04.2011 в 10:55)
| | не мой, не Ваш методы некорректны) | |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 17:59)
| | а мой? извините,не имею сейчас возможности проверить.. | |
|
|
|
|
|
|
|
для: alexander95
(01.04.2011 в 18:24)
| | Cannot use assign-op operators with overloaded objects nor string offset | |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 18:47)
| | Конечно же!
<?
function string_replace($string,$length=256)
{
for($i=$length;$string{$i} == ' ';$i++)
if($string{$i}=='\0')
return $string;
$string{$i++}.='.';
$string{$i++}.='.';
$string{$i++}.='.';
$string{$i}.='\0';
return $string;
}
?>
|
| |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 17:59)
| | Исправил свое творение, пару нюансов недосмотрел
function strok_replace($str='',$length=0){
$exp_str = explode(" ",$str);
$count = count($exp_str);
$plength = 0;
$j = 0;
$p = 0;
$length = abs(intval($length));
for($i=0;$i<$count;$i++){
$j++;
$nbsp = ($j!=$count)?" ":"";
$add = ($p != $i)?1:0;
$plength += mb_strlen($exp_str[$i],'UTF-8')+$add;
if($plength <= $length){
$strok .= $exp_str[$i].$nbsp;
}else{
$strok = $strok!=''?$strok.'...':$exp_str[$i];
break;
}
}
return $strok;
}
|
Вызываем
echo strok_replace('Привет мой старый друг',5); // Привет
echo strok_replace('Привет мой старый друг',6); // Привет ...
echo strok_replace('Привет мой старый друг',9); // Привет ...
echo strok_replace('Привет мой старый друг',10); // Привет мой ...
echo strok_replace('Привет мой старый друг',16); // Привет мой ...
echo strok_replace('Привет мой старый друг',17); // Привет мой старый ...
echo strok_replace('Привет мой старый друг',21); // Привет мой старый ...
echo strok_replace('Привет мой старый друг',22); // Привет мой старый друг
|
| |
|
|
|
|
|
|
|
для: TetRiska
(01.04.2011 в 18:33)
| | Решил слегка размять мозг))
<?php
$str = 'Текст почикал, а то страницу козявит';
$num = 20;
for($len = mb_strlen($str, 'utf-8'), $i = 0, $res = ''; $i <= $len; $i++){
if(mb_strlen($res, 'utf-8') >= $num and in_array($str[$i], array('.', ',', '!', ' '))) break;
$res .= $str[$i];
}
echo $res;
?>
|
| |
|
|
|