PHP é à quinta-feira – Cortar texto em largura

10 Comentários

… 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.

Comentários

10

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Ricardo2
    Ricardo2

    Obrigado por partilhar estas informaçoes conosco!

  2. Avatar de arlindo

    Muito bom post, vai dar uma boa ajuda com certeza.

  3. Avatar de Computed Life

    Boas gostava de aprender PHP será que alguém tem uns manuais/tutoriais alem destes óptimos do pplware para disponibilizar.

    Cumps

    1. Avatar de Bruno Bernardino

      Basta pesquisar aqui no blog que encontras muita coisa útil 🙂

      Para tirar dúvidas, o fórum é um bom local 😉

  4. Avatar de Bónus

    A ideia está boa. Já tinha feito uma função parecida.
    Devemos contar também com o “i”.

  5. Avatar de softclean
    softclean

    @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.

    1. Avatar de softclean
      softclean

      Bah, errei, não contei com o ($len-3) 😀

      1. Avatar de Bruno Bernardino

        Está lá por causa dos … que se acrescentam ao texto na função 🙂

    2. Avatar de Bruno Bernardino

      já agora, “Bom ver esta secção de volta.” parece-me exagerado! 🙂 Só esteve uma semana sem sair, notaram assim tanto? 😀

  6. Avatar de cativaweb

    Existem outras maneiras, mas esta eh bem interessante pois lhe da uma maior gama de opçoes.
    Obrigado