… não em caracteres.
O artigo de hoje vai parecer pequeno, mas acredito que vá ajudar muita gente.
Muitas vezes temos um limite de largura para um título e, como não se usam normalmente fontes mono-espaçadas (qualquer caracter ocupa o mesmo espaço em largura), definir um número de caracteres pode-se tornar falacioso.
A função que aqui apresento serve para isso mesmo pois, se bem que não é infalível, é bastante precisa com esse tipo de cálculos (a que aqui coloco não suporta muitos caracteres, mas são livres de a adaptar às vossas necessidades).
<?php
function cutText($txt,$len=30)
{
$strlen = strlen($txt);
for ($i=0;$i<strlen($txt);$i++)
{
if ($txt{$i} == '.' || $txt{$i} == ':') $strlen -= 0.5;
if ($txt{$i} == 'w' || $txt{$i} == '@') $strlen++;
}
$strlen = round($strlen);
if ($strlen > $len)
{
$txt = substr($txt,0,($len-3)).'...';
}
return $txt;
}
?>
Modo de utilização:
Como sempre, é bastante simples e intuitivo, segue um exemplo de como cortar um título para uma “largura” de 30 caracteres (o valor por omissão).
<?php
$titulo = “Isto é apenas um@ demonstração... ok?”;
$titulo_reduzido = cutText($titulo);
echo $titulo_reduzido;
?>
Isto é só uma “base” para perceberem esta ideia, que nem sempre será útil, mas sim no caso específico que abordei em cima.
Como podem perceber, a função conta o número de caracteres, mas caso o caracter a ser analisado seja um ponto ou dois pontos (poderão adicionar vírgulas, espaços, etc., mas quer um quer outro normalmente ocupam mais espaço em largura), o “contador interno” diminui meio caracter, mas caso o caracter seja um w ou uma arroba (caracteres mais largos do que o normal), aí já é “contabilizado” mais um caracter.
Já agora, o que é que o exemplo em cima vai mostrar? 🙂
Qualquer dúvida ou sugestão, estão completamente à vontade.