Jump to content
timamaco

Reduzir texto sem cortar palavra

Recommended Posts

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?

Share this post


Link to post
Share on other 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));

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
pikax

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

Edited by 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."

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
HappyHippyHippo

leste bem o que a primeira instrução faz ?

chegaste a testar a função ?


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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Edited by timamaco

Share this post


Link to post
Share on other sites
HappyHippyHippo

eu não percebo ... tens a solução e andas p'rai a dizer barbaridades ...


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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Edited by Virneto

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

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

Linuxando.com | ...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.