BRG 2 Denunciar post Postado Agosto 11, 2009 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
Matheus Tavares 167 Denunciar post Postado Agosto 11, 2009 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
BRG 2 Denunciar post Postado Agosto 11, 2009 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
Beraldo 864 Denunciar post Postado Agosto 11, 2009 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
Bruno Augusto 417 Denunciar post Postado Agosto 11, 2009 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
BRG 2 Denunciar post Postado Agosto 11, 2009 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
Beraldo 864 Denunciar post Postado Agosto 11, 2009 Então beraldo, mais esse só limita né, não destaca a palavra... após isso você usar str_ireplace(), como já citado Compartilhar este post Link para o post Compartilhar em outros sites
BRG 2 Denunciar post Postado Agosto 11, 2009 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
Beraldo 864 Denunciar post Postado Agosto 11, 2009 a lógica é a mesma. a diferença é que você tem que iniciar no texto buscado, não no inicio da string Compartilhar este post Link para o post Compartilhar em outros sites
BRG 2 Denunciar post Postado Agosto 11, 2009 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
Bruno Augusto 417 Denunciar post Postado Agosto 11, 2009 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
BRG 2 Denunciar post Postado Agosto 11, 2009 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
André D. Molin 15 Denunciar post Postado Agosto 11, 2009 http://thiagobelem.net/blog/php/2009/03/03/limitando-textos-8/ Compartilhar este post Link para o post Compartilhar em outros sites
BRG 2 Denunciar post Postado Agosto 11, 2009 http://thiagobelem.net/blog/php/2009/03/03/limitando-textos-8/ Mais ele não corta na palavra chave... , Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Agosto 12, 2009 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