Ir para conteúdo

POWERED BY:

Arquivado

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

BRG

Destacar palavras com limite

Recommended Posts

Salve pessoal.

 

Estamos com problema nessa função de destacar palavras com limites.

Acontece que na string repete a palavra, então o script fica meio perdido.. Ele também não localiza a palavra no inicio da frase.

O ideal era que achasse só a primeira ocorrencia... não precisaria das demais...

 

Alguem poderia ajudar?

 

<?
function destacar($palavra, $texto){
$limite = 10;
$limite++;
$explode = explode($palavra, $texto);
$parte1 = $explode[0];
$parte1 = strrev($parte1);
$parte2 = $explode[1];

$palavras1 = explode(" ",$parte1);
$palavras2 = explode(" ",$parte2);

$ant = "";
for($i=0; $i<$limite;$i++){
        $ant .= $palavras1[$i] . " ";
}

unset($i); 

$dep = "";
for($i=0; $i<$limite;$i++){
        $dep .= $palavras2[$i] . " ";
}
$ant = strrev($ant);

$p1 = (strlen($ant) >= $limite) ? "..." : "";
$p2 = (strlen($dep) >= $limite) ? "..." : "";

$final = $p1 . $ant . $palavra . $dep . $p2;
return chop(trim($final));
}
?>

Usando

<?
echo destacar("ASSIM", "1 DEPOIS apareceu-lhe o SENHOR nos carvalhais de Manre, estando ele assentado à porta da tenda, no calor do dia.
2 E levantou os seus olhos, e olhou, e eis três homens em pé junto a ele. E vendo-os, correu da porta da tenda ao seu encontro e inclinou-se à terra,
3 E disse: Meu Senhor, se agora tenho achado graça aos teus olhos, rogo-te que não passes de teu servo.
4 Que se traga já um pouco de água, e lavai os vossos pés, e recostai-vos debaixo desta árvore;
5 E trarei um bocado de pão, para que esforceis o vosso coração; depois passareis adiante, porquanto por isso chegastes até vosso servo. E disseram: Assim faze como disseste.
6 E Abraão apressou-se em ir ter com Sara à tenda, e disse-lhe: Amassa depressa três medidas de flor de farinha, e faze bolos.
7 E assim correu Abraão às vacas, e tomou uma vitela tenra e boa, e deu-a ao moço, que se apressou em prepará-la.
8 E tomou manteiga e leite, e a vitela que tinha preparado, e pôs tudo diante deles, e ele estava em pé junto a eles debaixo da árvore; e comeram.
9 E disseram-lhe: Onde está Sara, tua mulher? E ele disse: Ei-la aí na tenda.
10 E disse: Certamente tornarei a ti por este tempo da vida; e eis que Sara tua mulher terá um filho. E Sara escutava à porta da tenda, que estava atrás dele.
11 E eram Abraão e Sara já velhos, e adiantados em idade; já a Sara havia cessado o costume das mulheres.
12 Assim, pois, riu-se Sara consigo, dizendo: Terei ainda deleite depois de haver envelhecido, sendo também o meu senhor já velho?
13 E disse o SENHOR a Abraão: Por que se riu Sara, dizendo: Na verdade darei eu à luz ainda, havendo já envelhecido?
14 Haveria coisa alguma difícil ao SENHOR? Ao tempo determinado tornarei a ti por este tempo da vida, e Sara terá um filho.
15 E Sara negou, dizendo: Não me ri; porquanto temeu. E ele disse: Não digas isso, porque te riste.
16 E levantaram-se aqueles homens dali, e olharam para o lado de Sodoma; e Abraão ia com eles, acompanhando-os.
17 E disse o SENHOR: Ocultarei eu a Abraão o que faço,
18 Visto que Abraão certamente virá a ser uma grande e poderosa nação, e nele serão benditas todas as nações da terra?
19 Porque eu o tenho conhecido, e sei que ele há de ordenar a seus filhos e à sua casa depois dele, para que guardem o caminho do SENHOR, para agir com justiça e juízo; para que o SENHOR faça vir sobre Abraão o que acerca dele tem falado.
20 Disse mais o SENHOR: Porquanto o clamor de Sodoma e Gomorra se tem multiplicado, e porquanto o seu pecado se tem agravado muito,
21 Descerei agora, e verei se com efeito têm praticado segundo o seu clamor, que é vindo até mim; e se não, sabê-lo-ei.
22 Então viraram aqueles homens os rostos dali, e foram-se para Sodoma; mas Abraão ficou ainda em pé diante da face do SENHOR.
23 E chegou-se Abraão, dizendo: Destruirás também o justo com o ímpio?
24 Se porventura houver cinqüenta justos na cidade, destruirás também, e não pouparás o lugar por causa dos cinqüenta justos que estão dentro dela?
25 Longe de ti que faças tal coisa, que mates o justo com o ímpio; que o justo seja como o ímpio, longe de ti. Não faria justiça o Juiz de toda a terra?
26 Então disse o SENHOR: Se eu em Sodoma achar cinqüenta justos dentro da cidade, pouparei a todo o lugar por amor deles.
27 E respondeu Abraão dizendo: Eis que agora me atrevi a falar ao Senhor, ainda que sou pó e cinza.
28 Se porventura de cinqüenta justos faltarem cinco, destruirás por aqueles cinco toda a cidade? E disse: Não a destruirei, se eu achar ali quarenta e cinco.
29 E continuou ainda a falar-lhe, e disse: Se porventura se acharem ali quarenta? E disse: Não o farei por amor dos quarenta.
30 Disse mais: Ora, não se ire o Senhor, se eu ainda falar: Se porventura se acharem ali trinta? E disse: Não o farei se achar ali trinta.
31 E disse: Eis que agora me atrevi a falar ao Senhor: Se porventura se acharem ali vinte? E disse: Não a destruirei por amor dos vinte.
32 Disse mais: Ora, não se ire o Senhor, que ainda só mais esta vez falo: Se porventura se acharem ali dez? E disse: Não a destruirei por amor dos dez.
33 E retirou-se o SENHOR, quando acabou de falar a Abraão; e Abraão tornou-se ao seu lugar");
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo.

 

Desculpe se não entendi bem o que precisas, mas segue o meu jeito de solucionar este problema:

 

<?php
  $texto = "E assim, Moisés disse aquilo."
  echo str_replace('assim','<strong>assim</strong>',$texto);
?>

Ele coloca strong na palavra "assim", destacando-a.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, mais eu não queria que me retornasse o texto inteiro. Só um limite de 10 palavras antes de 10 depois da palavra destacada...

 

Ex:

... até que você haja assim, nós seremos sempre como pessoas...

 

Entendeu?

 

,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma forma simples de reduzir um texto:

 

$limite = 10;

$str = 'palavra1 palavra2 palavra3 palavra4 palavra5 palavra6 palavra7 palavra8 palavra9 palavra10 palavra11 palavra12 palavra13 palavra14';

echo preg_replace( "/^((.*? ){" . $limite . "})(.*)$/", "$1...", $str );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou usar o parâmetro limit de preg_replace():

 

$str = preg_replace( "/\\b(" . $palavra_que_voce_quer . ")\\b/", "<strong>$1</strong>", $str, 10 );

Depois você pode trocar o <strong> por outra coisa de sua preferência.

 

Eu adicionei também as bordas para que não case meias-palavras (quando a ocorrência combina dentro de outra palavra). Ex:

 

Buscando por manga casaria todas as palavras manga, incluindo erroneamente o adjetivo/substantivo cmposto manga-rosa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então beraldo, mais esse só limita né, não destaca a palavra...

 

:(

 

Ou usar o parâmetro limit de preg_replace():

 

$str = preg_replace( "/\\b(" . $palavra_que_voce_quer . ")\\b/", "<strong>$1</strong>", $str, 10 );

Depois você pode trocar o <strong> por outra coisa de sua preferência.

 

Eu adicionei também as bordas para que não case meias-palavras (quando a ocorrência combina dentro de outra palavra). Ex:

 

Buscando por manga casaria todas as palavras manga, incluindo erroneamente o adjetivo/substantivo cmposto manga-rosa

 

Fiz o teste aqui.. ele coloca o strong.. mais também não limita em ... 10(palavras) palavrachave (10)palavras ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então beraldo... mais olhe

 

<?php
$limite = 10;

$texto = '1 DEPOIS apareceu-lhe o SENHOR nos carvalhais de Manre, estando ele assentado à porta da tenda, no calor do dia.2 E levantou os seus olhos, e olhou, e eis três homens em pé junto a ele. E vendo-os, correu da porta da tenda ao seu encontro e inclinou-se à terra,3 E disse: Meu Senhor, se agora tenho achado graça aos teus olhos, rogo-te que não passes de teu servo.4 Que se traga já um pouco de água, e lavai os vossos pés, e recostai-vos debaixo desta árvore;5 E trarei um bocado de pão, para que esforceis o vosso coração; depois passareis adiante, porquanto por isso chegastes até vosso servo. E disseram: Assim faze como disseste. E assim correu Abraão às vacas, e tomou uma vitela tenra e boa, e deu-a ao moço, que se apressou em prepará-la.';

$str = str_replace('tenda','<strong>tenda</strong>',$texto);
echo preg_replace( "/^((.*? ){" . $limite . "})(.*)$/", "$1...", $str );
?>

Resultado

1 DEPOIS apareceu-lhe o SENHOR nos carvalhais de Manre, estando ...

A palavra está no meio da string... e não aparece... entendeu??

Ela teria que ficar em destaque..

 

Olha... eu tentei fazer algo assim:

<?
$conteudo =  strip_tags(stripslashes("1 DEPOIS apareceu-lhe o SENHOR nos carvalhais de Manre, estando ele assentado à porta da tenda, no calor do dia.
2 E levantou os seus olhos, e olhou, e eis três homens em pé junto a ele. E vendo-os, correu da porta da tenda ao seu encontro e inclinou-se à terra,
3 E disse: Meu Senhor, se agora tenho achado graça aos teus olhos, rogo-te que não passes de teu servo.
4 Que se traga já um pouco de água, e lavai os vossos pés, e recostai-vos debaixo desta árvore;
5 E trarei um bocado de pão, para que esforceis o vosso coração; depois passareis adiante, porquanto por isso chegastes até vosso servo. E disseram: Assim faze como disseste.
6 E Abraão apressou-se em ir ter com Sara à tenda, e disse-lhe: Amassa depressa três medidas de flor de farinha, e faze bolos.
7 E assim correu Abraão às vacas, e tomou uma vitela tenra e boa, e deu-a ao moço, que se apressou em prepará-la.
8 E tomou manteiga e leite, e a vitela que tinha preparado, e pôs tudo diante deles, e ele estava em pé junto a eles debaixo da árvore; e comeram.
9 E disseram-lhe: Onde está Sara, tua mulher? E ele disse: Ei-la aí na tenda.
10 E disse: Certamente tornarei a ti por este tempo da vida; e eis que Sara tua mulher terá um filho. E Sara escutava à porta da tenda, que estava atrás dele.
11 E eram Abraão e Sara já velhos, e adiantados em idade; já a Sara havia cessado o costume das mulheres.
12 Assim, pois, riu-se Sara consigo, dizendo: Terei ainda deleite depois de haver envelhecido, sendo também o meu senhor já velho?
13 E disse o SENHOR a Abraão: Por que se riu Sara, dizendo: Na verdade darei eu à luz ainda, havendo já envelhecido?
14 Haveria coisa alguma difícil ao SENHOR? Ao tempo determinado tornarei a ti por este tempo da vida, e Sara terá um filho.
15 E Sara negou, dizendo: Não me ri; porquanto temeu. E ele disse: Não digas isso, porque te riste.
16 E levantaram-se aqueles homens dali, e olharam para o lado de Sodoma; e Abraão ia com eles, acompanhando-os.
17 E disse o SENHOR: Ocultarei eu a Abraão o que faço,
18 Visto que Abraão certamente virá a ser uma grande e poderosa nação, e nele serão benditas todas as nações da terra?
19 Porque eu o tenho conhecido, e sei que ele há de ordenar a seus filhos e à sua casa depois dele, para que guardem o caminho do SENHOR, para agir com justiça e juízo; para que o SENHOR faça vir sobre Abraão o que acerca dele tem falado.
20 Disse mais o SENHOR: Porquanto o clamor de Sodoma e Gomorra se tem multiplicado, e porquanto o seu pecado se tem agravado muito,
21 Descerei agora, e verei se com efeito têm praticado segundo o seu clamor, que é vindo até mim; e se não, sabê-lo-ei.
22 Então viraram aqueles homens os rostos dali, e foram-se para Sodoma; mas Abraão ficou ainda em pé diante da face do SENHOR.
23 E chegou-se Abraão, dizendo: Destruirás também o justo com o ímpio?
24 Se porventura houver cinqüenta justos na cidade, destruirás também, e não pouparás o lugar por causa dos cinqüenta justos que estão dentro dela?
25 Longe de ti que faças tal coisa, que mates o justo com o ímpio; que o justo seja como o ímpio, longe de ti. Não faria justiça o Juiz de toda a terra?
26 Então disse o SENHOR: Se eu em Sodoma achar cinqüenta justos dentro da cidade, pouparei a todo o lugar por amor deles.
27 E respondeu Abraão dizendo: Eis que agora me atrevi a falar ao Senhor, ainda que sou pó e cinza.
28 Se porventura de cinqüenta justos faltarem cinco, destruirás por aqueles cinco toda a cidade? E disse: Não a destruirei, se eu achar ali quarenta e cinco.
29 E continuou ainda a falar-lhe, e disse: Se porventura se acharem ali quarenta? E disse: Não o farei por amor dos quarenta.
30 Disse mais: Ora, não se ire o Senhor, se eu ainda falar: Se porventura se acharem ali trinta? E disse: Não o farei se achar ali trinta.
31 E disse: Eis que agora me atrevi a falar ao Senhor: Se porventura se acharem ali vinte? E disse: Não a destruirei por amor dos vinte.
32 Disse mais: Ora, não se ire o Senhor, que ainda só mais esta vez falo: Se porventura se acharem ali dez? E disse: Não a destruirei por amor dos dez.
33 E retirou-se o SENHOR, quando acabou de falar a Abraão; e Abraão tornou-se ao seu lugar"));
?>

Ai usando essa função;

preg_match_all('#(.\w+.){0,3}ASSIM(.\w+.){0,3}#iS', $conteudo, $matchs, PREG_SET_ORDER);
if(($curMatch =& current($matchs)) != null) {
    echo '...', $curMatch[0], '...', nl2br("\n");
    next($matchs);
}

Resultado

...Assim faze como disseste....

O resultado teria que ser assim:

...[b]Assim[/b] faze como disseste....
Com mais algumas palavras antes e algumas depois da palavra chave

 

 

Porem ele não me retorna a palavra chave em destaque...

Alguma ajuda nesse?

 

 

 

,

Compartilhar este post


Link para o post
Compartilhar em outros sites

a lógica é a mesma. a diferença é que você tem que iniciar no texto buscado, não no inicio da string

 

Um.. tem como me da um exemplo??

 

,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então beraldo, mais esse só limita né, não destaca a palavra...

 

:(

 

 

Ou usar o parâmetro limit de preg_replace():

 

$str = preg_replace( "/\\b(" . $palavra_que_voce_quer . ")\\b/", "<strong>$1</strong>", $str, 10 );

Depois você pode trocar o <strong> por outra coisa de sua preferência.

 

Eu adicionei também as bordas para que não case meias-palavras (quando a ocorrência combina dentro de outra palavra). Ex:

 

Buscando por manga casaria todas as palavras manga, incluindo erroneamente o adjetivo/substantivo cmposto manga-rosa

 

Fiz o teste aqui.. ele coloca o strong.. mais também não limita em ... 10(palavras) palavrachave (10)palavras ...

 

Muito estranho, já que o parâmetro limit serve justamente para isso.

 

Mas,se não funcionou, faça como o Beraldo mostrou, usando chaves controladoras. Apenas troque o valor do segundo argumento para já substituir de vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Então beraldo, mais esse só limita né, não destaca a palavra...

 

:(

 

 

Ou usar o parâmetro limit de preg_replace():

 

$str = preg_replace( "/\\b(" . $palavra_que_voce_quer . ")\\b/", "<strong>$1</strong>", $str, 10 );

Depois você pode trocar o <strong> por outra coisa de sua preferência.

 

Eu adicionei também as bordas para que não case meias-palavras (quando a ocorrência combina dentro de outra palavra). Ex:

 

Buscando por manga casaria todas as palavras manga, incluindo erroneamente o adjetivo/substantivo cmposto manga-rosa

 

Fiz o teste aqui.. ele coloca o strong.. mais também não limita em ... 10(palavras) palavrachave (10)palavras ...

 

Muito estranho, já que o parâmetro limit serve justamente para isso.

 

Mas,se não funcionou, faça como o Beraldo mostrou, usando chaves controladoras. Apenas troque o valor do segundo argumento para já substituir de vez.

 

Então Imaggens, como assim? eu tentei inumeras vezes de inumeros jeitos e nada...rs

 

,

Compartilhar este post


Link para o post
Compartilhar em outros sites

pegar o texto a partir da palavra buscada é simples. Há diversas maneiras de se fazer. Pode usar strstr() para buscar a parte onde está a palavra-chave, depois usar substr() para pegar apenas uma parte da string total - a que contém a palavra-chave.

 

Outra forma é usar explode()e pegar somente a segunda parte do array retornado.

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.