Cortar strings sem cortar palavras
Extrair parte de um texto é uma tarefa que precisa de um pouco de cuidado. Um simples substr pode acabar cortando uma palavra ao meio, dando um novo significado ao texto. Observe o exemplo abaixo:
substr('Programa transforma celulares comuns em smartphone', 0, 25);
>> Programa transforma celula
De “celulares” passou a ser “celula”. A frase teve um novo significado.
Sushiman
function truncate($str, $len, $etc='') {
$end = array(' ', '.', ',', ';', ':', '!', '?');
if (strlen($str) <= $len)
return $str;
if (!in_array($str{$len - 1}, $end) && !in_array($str{$len}, $end))
while (--$len && !in_array($str{$len - 1}, $end));
return rtrim(substr($str, 0, $len)).$etc;
}
Truncate corta strings tomando cuidado para não separar palavras ao meio ou em qualquer outra parte. É muito possível que o valor retornado tenha menos caracteres que o solicidado, mas temos a certeza que nenhuma palavra será quebrada.
Exemplos:
$str = 'Estrelas pequenas e com pouco brilho, conhecidas como anãs vermelhas, são muito mais comuns do que se imaginava.'; substr($str, 0, 50); >> Estrelas pequenas e com pouco brilho, conhecidas co truncate($str, 50); >> Estrelas pequenas e com pouco brilho, conhecidas truncate($str, 50, '...'); >> Estrelas pequenas e com pouco brilho, conhecidas...