Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

borsatti

Função que corta texto sem cortar palavra

Recommended Posts

eu vi uma função dessa la embaixo mas acho que nao precisava de tudo aquilo , então vou por a minha.

 

//Resume o texto e nao corta as palavras
	function resumo($texto,$qnt){
	        $resumo=substr($texto,'0',$qnt);
		$last=strrpos($resumo," ");
		$resumo=substr($resumo,0,$last);
		return $resumo."...";
	}

para usar resumo("Maria Corta a Mao","10");
ai vai retornar e no final ... se não quiser os 3 pontinhos é só tirar ali na função! 


Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

OBS: não precisava de tudo aquilo?, nem sei qual função você viu, mas concerteza era necessario, pois a sua função tem falhas e não é pratica e poderia dar a opção para o usuario reduzir do lado esquerda ou direito

 

:natal_happy:

Compartilhar este post


Link para o post
Compartilhar em outros sites

OBS: não precisava de tudo aquilo?, nem sei qual função você viu, mas concerteza era necessario, pois a sua função tem falhas e não é pratica e poderia dar a opção para o usuario reduzir do lado esquerda ou direito

 

http://forum.imasters.com.br/public/style_emoticons/default/natal_happy.gif

 

 

Fabyo qual a função você sugere para este caso, estou tendo esta necessidade...

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou postar aqui a função do illidan que ele publicou num forum chamado Foo, só que esse forum esta muito tempo inativo, então se eu postar só o link corre o risco de um dia sumir e ninguem mais ver a função

 

OBS: apesar do codigo ter sido criado em 2005 ele esta muito bem feito, pois o Illidan é um excelente programador e mestre dos magos em javascript = )

 

então esta ai a função do Illidan:

 

Função para reduzir uma string sem cortar palavras ao meio

 

Esta função reduz uma string até um limite máximo de caracteres sem cortar palavras ao meio. Pode-se reduzir a string pela sua extremidade direita (padrão da função), esquerda, ambas ou pelo centro. Por padrão, serão adicionados três pontos "..." à parte reduzida da string, mas pode-se modificar isto através do parâmetro $append. Por exemplo, você poderia querer que ela incluísse três pontos entre parênteses: "(...)", ou que ela não incluísse coisa alguma: "".

 

A função remove também o excesso de espaços (" ", <TABS> ou <ENTERS>), de forma que ela tentará retornar o máximo de palavras sem exceder o limite imposto por $max_length.

 

Exemplos de como utilizar:

 

<?php

$str = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";

echo str_reduce($str, 100);
/* Retornará:

"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut ..."
*/

echo str_reduce($str, 100, "(...)", STR_REDUCE_LEFT);
/* Retornará:

"(...) cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
*/

?> 

 

Obs: pra reduzir por ambas as extremidades, você deverá passar dois valores no quarto parâmetro da função. Para isso, utilize o operador bit a bit "|" desta forma:

 

(STR_REDUCE_LEFT | STR_REDUCE_RIGHT)

 

Código fonte da função:

 

<?php

define("STR_REDUCE_LEFT", 1);
define("STR_REDUCE_RIGHT", 2);
define("STR_REDUCE_CENTER", 4);

/**
*  @autor: Carlos Reche
*  @data:  Jan 21, 2005
*/
function str_reduce($str, $max_length, $append = NULL, $position = STR_REDUCE_RIGHT, $remove_extra_spaces = true)
{
   if (!is_string($str))
   {
       echo "<br /><strong>Warning</strong>: " . __FUNCTION__ . "() expects parameter 1 to be string.";
       return false;
   }
   else if (!is_int($max_length))
   {
       echo "<br /><strong>Warning</strong>: " . __FUNCTION__ . "() expects parameter 2 to be integer.";
       return false;
   }
   else if (!is_string($append)  &&  $append !== NULL)
   {
       echo "<br /><strong>Warning</strong>: " . __FUNCTION__ . "() expects optional parameter 3 to be string.";
       return false;
   }
   else if (!is_int($position))
   {
       echo "<br /><strong>Warning</strong>: " . __FUNCTION__ . "() expects optional parameter 4 to be integer.";
       return false;
   }
   else if (($position != STR_REDUCE_LEFT)  &&  ($position != STR_REDUCE_RIGHT)  &&
            ($position != STR_REDUCE_CENTER)  &&  ($position != (STR_REDUCE_LEFT | STR_REDUCE_RIGHT)))
   {
       echo "<br /><strong>Warning</strong>: " . __FUNCTION__ . "(): The specified parameter '" . $position . "' is invalid.";
       return false;
   }


   if ($append === NULL)
   {
       $append = "...";
   }


   $str = html_entity_decode($str);


   if ((bool)$remove_extra_spaces)
   {
       $str = preg_replace("/\s+/s", " ", trim($str));
   }


   if (strlen($str) <= $max_length)
   {
       return htmlentities($str);
   }


   if ($position == STR_REDUCE_LEFT)
   {
       $str_reduced = preg_replace("/^.*?(\s.{0," . $max_length . "})$/s", "\\1", $str);

       while ((strlen($str_reduced) + strlen($append)) > $max_length)
       {
           $str_reduced = preg_replace("/^\s?[^\s]+(\s.*)$/s", "\\1", $str_reduced);
       }

       $str_reduced = $append . $str_reduced;
   }


   else if ($position == STR_REDUCE_RIGHT)
   {
       $str_reduced = preg_replace("/^(.{0," . $max_length . "}\s).*?$/s", "\\1", $str);

       while ((strlen($str_reduced) + strlen($append)) > $max_length)
       {
           $str_reduced = preg_replace("/^(.*?\s)[^\s]+\s?$/s", "\\1", $str_reduced);
       }

       $str_reduced .= $append;
   }


   else if ($position == (STR_REDUCE_LEFT | STR_REDUCE_RIGHT))
   {
       $offset = ceil((strlen($str) - $max_length) / 2);

       $str_reduced = preg_replace("/^.{0," . $offset . "}|.{0," . $offset . "}$/s", "", $str);
       $str_reduced = preg_replace("/^[^\s]+|[^\s]+$/s", "", $str_reduced);

       while ((strlen($str_reduced) + (2 * strlen($append))) > $max_length)
       {
           $str_reduced = preg_replace("/^(.*?\s)[^\s]+\s?$/s", "\\1", $str_reduced);

           if ((strlen($str_reduced) + (2 * strlen($append))) > $max_length)
           {
               $str_reduced = preg_replace("/^\s?[^\s]+(\s.*)$/s", "\\1", $str_reduced);
           }
       }

       $str_reduced = $append . $str_reduced . $append;
   }


   else if ($position == STR_REDUCE_CENTER)
   {
       $pattern = "/^(.{0," . floor($max_length / 2) . "}\s)|(\s.{0," . floor($max_length / 2) . "})$/s";

       preg_match_all($pattern, $str, $matches);

       $begin_chunk = $matches[0][0];
       $end_chunk   = $matches[0][1];

       while ((strlen($begin_chunk) + strlen($append) + strlen($end_chunk)) > $max_length)
       {
           $end_chunk = preg_replace("/^\s?[^\s]+(\s.*)$/s", "\\1", $end_chunk);

           if ((strlen($begin_chunk) + strlen($append) + strlen($end_chunk)) > $max_length)
           {
               $begin_chunk = preg_replace("/^(.*?\s)[^\s]+\s?$/s", "\\1", $begin_chunk);
           }
       }

       $str_reduced = $begin_chunk . $append . $end_chunk;
   }

   return htmlentities($str_reduced);
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Humm...

 

A funcionalidade é ótima, mais, dependendo da necessidade do programador, não vejo porque de um código desse tamanho... poderia ser o simples mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas a questão toda não é o tamanho da função em linhas e sim sua necessidade e praticidade nos recursos que a função pode oferecer

 

nao adianta ter uma função pequena que nao atende o que precisa, se atende blz.

 

mas não sou contra funções pequenas, eu mesmo adoro fazer funções com poucas linhas ou 1 linha, mas a função tem que fazer o que precisa ser feito.

:natal_wink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verdade...

 

Acredito que pela funcionalidade deveria ser algo menos "grande"...

Agradeço ao retorno rápido e irei pesquisar alguma coisa se encontrar posterei aqui.

bom achei esta aqui... no fórum mesmo que quiser ver ...

 

http://forum.imasters.com.br/index.php?/topic/197740-funcao-de-resumo/

 

Tem esta aqui também que encontrei no google

 

<?php

 

$texto = "O rato roeu a roupa do rei de Roma.";

$texto = explode(" ", substr($texto, 0, 25));

if(count($texto) > 1) array_pop($texto);

$texto = implode(" ", $texto)."...";

echo $texto;

// retorna: O rato roeu a roupa do...

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem funções que são grandes mais cheios de encher linguiça, eu ja peguei funções com um monte de loop sendo que daria pra tirar a metade, ai sim a função ta obesa

 

por exemplo eu tenho uma função que eu criei em 2005 para validar CNPJ que usa apenas 1 loop e poucas linhas, a maioria das funções por ai usa 2 loops

:natal_w00t:

Compartilhar este post


Link para o post
Compartilhar em outros sites

É verdade, eu também já vi várias funções obesas, pra falar a verdade é o que mais tem por aí.

 

Outra obesidade horrível em um script, é usar loop para pegar dados estáticos, referente apenas a um ID, quando se deve usar um simples fetch_array...

 

essas e outras coisinhas acabam de uma certa forma "estragando o sistema", aí acaba dando, não só aparecência de grande, mais tambem, como você diz, "obeso" hehehehhee

 

http://forum.imasters.com.br/public/style_emoticons/default/natal_laugh.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.