PHP é à quinta-feira – Cortar texto em largura
... 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.
Este artigo tem mais de um ano
Obrigado por partilhar estas informaçoes conosco!
Muito bom post, vai dar uma boa ajuda com certeza.
Boas gostava de aprender PHP será que alguém tem uns manuais/tutoriais alem destes óptimos do pplware para disponibilizar.
Cumps
Basta pesquisar aqui no blog que encontras muita coisa útil 🙂
Para tirar dúvidas, o fórum é um bom local 😉
A ideia está boa. Já tinha feito uma função parecida.
Devemos contar também com o “i”.
@mini-desafio
Acho que vai dar:
Isto é apenas um@ demonstração…
Os cálculos intermédios do ++ e o -0.5 não afectam este caso em particular. Os três pontos não são os da frase, são adicionados pela função. Não cheguei a testar no PHP, vou testar agora para confirmar o resultado.
Já agora, se percebi a ideia, acho que se podia juntar o caractere ‘m’ ao ‘w’ e ao ‘@’, por ser um um pouco maior que a média (assim a olho, pelo menos 😀 ).
Bom ver esta secção de volta.
Bah, errei, não contei com o ($len-3) 😀
Está lá por causa dos … que se acrescentam ao texto na função 🙂
já agora, “Bom ver esta secção de volta.” parece-me exagerado! 🙂 Só esteve uma semana sem sair, notaram assim tanto? 😀
Existem outras maneiras, mas esta eh bem interessante pois lhe da uma maior gama de opçoes.
Obrigado