El problema es que estamos cortando una palabra o bien por la tilde o por un caracter html.
Lo principal es limpiar nuestro texto a cortar quitandole las etiquetas html eso lo hacemos con la funcion
strip_tags($texto)
Pero aun asi no sera suficiente debemos crearnos una funcion que controle esos caracteres estraños.
function _substr($str, $length, $minword = 3){ $sub = »; $len = 0; foreach (explode(‘ ‘, $str) as $word) { $part = (($sub != ») ? ‘ ‘ : ») . $word; $sub .= $part; $len += strlen($part); if (strlen($word) > $minword && strlen($sub) >= $length) { break; } } return $sub . (($len < strlen($str)) ? ‘…’ : »);}
Ahora para aplicarselo a nuestro texto haremos.
echo
_substr(strip_tags($texto),20);
Y ya nos ira todo sobreruedas.
Si quisieramos hacerlo pero contando lineas solo debemos hacer
function text_limit($str,$limit=10) { if(stripos($str," ")){ $ex_str = explode(" ",$str); if(count($ex_str)>$limit){ for($i=0;$i<$limit;$i++){ $str_s.=$ex_str[$i]." "; } return $str_s; }else{ return $str; } }else{ return $str; } }