Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Mostrar antes e depois do texto pesquisado


Marcelinho

Pergunta

Galera seguinte eu criei um sistema de busca pro meu site tá funcionando tudo certinho, só que eu queria que mostrasse o antes e o dpois do texto pesquisado, tipo:

Pesquiso por "culpa" no banco de dados, e ele acha:

"Muitas pessoas não entendem porque ocorrem alguns problemas em seus relacionamentos e se sentem frustradas, achando que a culpa do término ou das brigas sem fim é dela. Outras pessoas, se sentem menos amadas ou que as expectativas não estão sendo correspondidas."

Pra não ter que mostrar o texto todo, tem como por exemplo aparecer apenas:

"...achando que a culpa do término..."

Desde já agradeço

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Muito obrigado pela dica Jonathan eu achei aqui algo sobre isso, mais ainda assim não sei como adaptar à minha necessidade, eu ainda to aprendendo php e isso é uma das várias dúvidas que tenho...rsrsrs

Se você puder me ajudar, eu agradeço!

Eu achei isso, que inicialmente pensei q resolveria, mais não irá resolver, olha:

echo substr('abcdef', 1, 3);  // bcd
Aí ele pega o meio do texto exatamente como eu precisava, mais como faço pra ele pegar apenas a parte que eu citei aí em cima? Eu to usando meu código assim:
<?php
$re = mysql_query("SELECT * FROM artigos WHERE titulo LIKE '%".$busca."%';");

$count = mysql_num_rows($re);
?>
<?
  echo "<table width='600' border='0' cellspacing='0' bordercolor='#FFFFFF' bgcolor='#FFFFFF'>
<tr> 
<td>
<strong><font size='2' face='Trebuchet MS, Arial, Helvetica, sans-serif'>Artigos</font></strong>
</td>
</tr>";

if ($count == 0) {
echo "<tr><td><font size='1' color='#999' face='Trebuchet MS, Arial, Helvetica, sans-serif'>Nenhum resultado!</font></td></tr>";
} else {

while($l = mysql_fetch_array($re)) {
    $titulo          = $l["titulo"];
    
echo "<tr>
<td><font size='2' face='Trebuchet MS, Arial, Helvetica, sans-serif' color='#0000FF'>&nbsp;$titulo</font></td>
</tr>\n";
}
}
echo "</table>";    
@mysql_close();
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Surgiu outra dúvida agora, tipo se o cara pesquisa por "culpa" como faço pra que na listagem ela apareça em negrito, eu usei essa função:

$output  = str_replace($busca, $busca, "<strong>$busca</strong>");

Mais na hora de exibir os resultados continuou na mesma =/

Agradeço desde já quem puder me tirar essa dúvida, e a outra de cima também...

Link para o comentário
Compartilhar em outros sites

  • 0

Se só quiser parte do texto antes e depois da primeira ocorrencia da palavra,e não se importar com quebras de palavras pode fazer algo do tipo:

<?php
$conteudo = 'Lorem ipsum bla bla bla hadugem bla bla bla.'; /*vamos supor que é o que foi pego do BD*/
$op = strpos($conteudo, 'hadugem');
echo '...', substr($conteudo, $op-10, $op+10), '...';
?>
Caso o contrário...recomendo que use Expressoes Regulares. Algo como por exemplo:
<?php
$conteudo = 'Ryu soltou seu hadugem.Revoltado...jusé disse que soltaria o seu,mas seu hadugem era inofensivo.'; /*vamos supor que é o que foi pego do BD*/
preg_match_all('#(.\w+.){0,3}hadugem(.\w+.){0,3}#iS', $conteudo, $matchs, PREG_SET_ORDER);
while(($curMatch =& current($matchs)) != null) {
    echo '...', $curMatch[0], '...', nl2br("\n");
    next($matchs);
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Vlw proust, mais funcionou e não funcionou o código =/

Tipo quando ele pesquisa por hadugem ele funciona na boa, mais aí eu troquei pra procurar hadugem por ipsum, e ele retornou esse valor:

...bla...

Eu testei também com outro texto aki e deu na mesma, eu fiz minha função desse jeito:

A frase que ele retorna do $titulo é essa: Os quatro erros mais comuns no relacionamento

$busca = "mais"; //É só uma suposição, na verdade esse valor vem por meio de um $_POST

while($l = mysql_fetch_array($re)) {
    $titulo      = $l["titulo"];

$op = strpos($titulo, '$busca');
echo '...', substr($titulo, $op-10, $op+10), '...';

Ele retornou esse valor: ...acionamento...

Vlw pela ajuda, se você puder ver o q aconteceu eu fico muito agradeçido...

Editado por Marcelinho
Link para o comentário
Compartilhar em outros sites

  • 0

Opa, vlw lucas...Nunca ia saber disso...hehehe

Vlw mesmo, mais ainda tá dando erro, tipo se eu pesquiso por "quatro" ele retorna:

...namento...

Não sei se tem alguma coisa haver, mais acho q é por causa disso: $op-10

Parece que não dá pra voltar -10 caracteres antes da palavra que é bem no inicio, tem algu jeito de concertar?

Agradeço pela ajuda!

Link para o comentário
Compartilhar em outros sites

  • 0

Não me lembro muito bem na função substr, como ela trata os valores negativos (e to com preguissa de olhar no manual), tente o seguinte, faça uma condição para não ser negativo... caso o numero da posição seja menor que 10 não diminui, caso contrario diminua.... :P

[EDIT]

Isso esta meio problematico, axo que não terá "problema" de colocar o ponteiro do corte inicial da string exatamente onde queres... tente assim:

substr($titulo, $op, $op+10)

Editado por lucasw´p
Link para o comentário
Compartilhar em outros sites

  • 0

Bom vlw galera pela ajuda, vou usar o outro código que o proust me passou, apesar que eu não entendi o código, só mudei mesmo o básico =)

<?php
$conteudo = 'Ryu soltou seu hadugem.Revoltado...jusé disse que soltaria o seu,mas seu hadugem era inofensivo.'; /*vamos supor que é o que foi pego do BD*/
preg_match_all('#(.\w+.){0,3}hadugem(.\w+.){0,3}#iS', $conteudo, $matchs, PREG_SET_ORDER);
while(($curMatch =& current($matchs)) != null) {
    echo '...', $curMatch[0], '...', nl2br("\n");
    next($matchs);
}
?>

Muito obrigado a todos

lucas, proust e Jonathan

Link para o comentário
Compartilhar em outros sites

  • 0

Meu amigo proust, muito legal sua função com ER.

Agora, digamos que eu tenha uma string 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"));

Usando sua função ER, Como que eu consigo obter um resultado assim:

... os seus olhos, e olhou, e eis três homens em pé junto a ele...

Em suma... A função acharia só a primeira ocorrencia, marcaria a palavra buscada em negrito e antes e depois da palavra chave, existir um limite de 10 palavras antes e 10 depois...

teria como??

,

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...