Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

timamaco

Reduzir texto sem cortar palavra

Mensagens Recomendadas

timamaco

Olá amigos

Sou novo no php e como tal, estou a ter agora uma duvida que não consigo resolver.

Num texto bastante grande, eu pretendia redizer por exemplo para 100 palavras, so que ainda não conheço todas as funções. Estou a usar o "substr", mas esta função é usada por letras e não palavras, como tal, há sempre alguma palavra que irá ser cortada.

Alguem me pode ajudar?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
// cortar para ter somente as 101 primeiras letras
$str = substr($str, 0, 101);
// cortar no último espaço da string
$str = substr($str, 0, strrpos($str, " ", -1));

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
timamaco

A função strrpos esta a fazer com que seja cortadas palavras a partir do fim do texto.

É certo que não corta a meio das palavras, mas se tiver um texto com 10mil letras, e começas a cortar do fim, não da grande resultado :s

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

ve se e' algo como esta funcao que queres: http://php.net/manual/en/function.str-word-count.php

Editado por pikax

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

A função strrpos esta a fazer com que seja cortadas palavras a partir do fim do texto.

É certo que não corta a meio das palavras, mas se tiver um texto com 10mil letras, e começas a cortar do fim, não da grande resultado :s

se tiveres um texto com 10mil letras o que tu cortar ?

devias de pensar antes de apresentares argumentos desses


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
timamaco

se tiveres um texto com 10mil letras o que tu cortar ?

devias de pensar antes de apresentares argumentos desses

Imagine-mos que temos este frase/texto:

EX: "Tenho uma frase muito grande e demasiado comprida aqui escrita no portugal a programar"

Pretendia, imagine-mos cortar até 20 letras, se fosse com a função substr ficaria "Tenho uma frase muit", com o 'o' cortado,

como tal, pretendia que ficasse apenas "Tenho uma frase", sem nada cortado, ficando visivel ate ao ultimo espaço disponivel.

Mas a começar a ler desde o inicio da função, pois pelo que reparei, a função strrpos que voce partilhou, parece que começa do fim :s

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
timamaco

// cortar para ter somente as 101 primeiras letras
$str = substr($str, 0, 101);

Refere-se a esta instrução??

Se sim, sim testei, pois era como eu estava a fazer antes de perguntar aqui.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
timamaco

Mas o que essa instrução faz não é so ler X letras, pois se é, poderá sempre haver algumas palavras que sejam cortadas a meio, e não pretendia que fosse feito dessa forma.

Gostaria mais que lesse essas tais X letras, mas que so cortasse ou antes ou depois da ultima palavra lida.

Editado por timamaco

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
timamaco

Agora estou a ficar confuso. Se com a função substr nesta seguinte frase, o resultado não fica assim?

//Mostrar 10 letras
$texto = "Este é o texto de exemplo";
$str = substr($texto, 0, 13);

Resultado: "Este é o tex".

Supostamente ficara assim, estou certo?

Penso que esteja a dizer bem, pois é algo do genero que me aparece, mas se estiver errado, alguem que me corriga.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
timamaco

epa .. usa todo o código que te apresentei !!!

Exactamente amigo, é o que estou realmente a fazer, a usar as duas funções que apresentas-te.

Mas pronto, obrigado pela ajuda, e desculpa qualquer coisa. Vou continuar a tentar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Virneto

A função strrpos esta a fazer com que seja cortadas palavras a partir do fim do texto.

É certo que não corta a meio das palavras, mas se tiver um texto com 10mil letras, e começas a cortar do fim, não da grande resultado :s

a função que te deu o @happy corta a partir do fim da nova string de 101 caracteres, não a partir do fim do texto original, portanto não tens razão.

Não percebo que queiras separar exatamente aos 100 caracteres porque se o fizeres vais certamente ter palavras cortadas

para além das soluções que já te foram dadas aqui fica mais uma hipótese...

<?php

$a_tua_string="bla bla bla ble bli ti pim pim";

//fragmenta a string a cada espaço (o que não significa necessáriamente que o estás a fazer a cada palavra)

$dividida=explode(" ", $a_tua_string);
//agora tens um array constituido por várias strings com uma palavra. Trabalha a partir daí.

echo $dividida[0]; // bla
echo $dividida[1]; // bla
echo $dividida[6]; // pim

// depois para cortares no primeiro espaço assim que já tiveres mais de 100 caracteres acho que podes fazer um foreach ou um for
//começas com 0 caracteres
$contageral=0;

foreach ($dividida as $palavra)
{ //para cada palavra do array conta os caracteres de cada string e junta-os à conta geral
  $conta=strlen($palavra);
  $contageral=$contageral+$conta;
// depois verificas se ultrapassaste o valor 100 e páras por aí com ou sem a palavra em causa se quiseres a string acima ou abaixo dos 100 caracteres respetivamente

  if ($contageral > 100) {
  // chegaste aos 100
  // faz o que quiseres com a $novasrting!!!
		 }
  else {
  //ainda não tem 100 carateres. acrescenta a palavra à variável $novastring
  $novastring[]=$palavra;
  }
}
?>

ps. é possível que encontres erros ou pressupostos errados. Eu não sou pro! Considera-os um incentivo à tua aprendizagem :P

Editado por Virneto

"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.