0

BUSCA COM RETICENCIAS

criado por Marcos da Silva Martins em 28/09/2010 10:07am
Olá pessoal, gostaria de saber como faço para exibir somente parte do resultado buscado e destacando de alguma forma a palavra buscada.

Ex: o usuário colocou na busca a palavra casa. Daí ele achou no banco de dados um campo com um texto imenso que possui a palavra casa, mas eu não gostaria que ele listasse todo o texto, e sim a frase perto da palavra casa e de repente com uma reticencias antes e depois desse resultado. se alguém puder me ajudar agradeço.

PS: a parte da busca eu sei fazer tranquilo usando o like, só não estou conseguindo mesmo é pegar somente o resultado do bd próximo a palavra buscada.

Lista de Respostas:

0
28/09/2010 10:44am
(~13 anos atrás)
Faz assim.

<?php

$busca = 'casa';//Texto da busca
$texto = 'Eu gostava muito de uma música que era mais ou menos assim. Era uma casa muito engraçada, não tinha teto não tinha nada, ninguem podia fazer xixi, por que pinico não tinha alí.';//Texto do banco de dados.

$limit = 20;//Limite de caracteres antes e depois do texto.

$pos = strpos($texto, $busca);

if($pos !== false){

  $len = strlen($busca);
  $inicio = $pos - $limit;
  $inicio = ($inicio < 0) ? 0 : $inicio;
  $final = ($pos + $len) + $limit;

  //String com o resultado
  $strTratada = substr($texto, $inicio, $final);

  //Adicionando reticencias no inicio e no final
  $strTratada = ($inicio > 0) ? '...' . $strTratada : $strTratada;
  $strTratada .= ($final < strlen($texto)) ? '...' : null;

  //Adicionando negrito ao texto encontrado
  $replace = '' . $busca . '';
  $strTratada = str_replace($busca, $replace, $texto);

//O código acima é para o caso de achar a busca no texto
//Já o código abaixo, é para o caso de não encontrar e mostrar apenas um texto padrão
} else {

  $final = $limit * 2;
  $strTratada = substr($texto, 0, $final);

  //Adicionando as reticencias
  $strTratada .= ($final < strlen($texto)) ? '...' : null;

}

echo $strTratada

?>

Então
Você pode transformar isto numa função para seu código ficar bem mais limpo e claro...

0
28/09/2010 10:54am
(~13 anos atrás)
Aí...
Nesta linha abaixo
$replace = '' . $busca . '';

Ficou assim com as aspas vazias, sem nada dentro.
Mas é por que eu coloquei a tag b, porém, ele não apareceu...

Apenas adicione a tag b e fecha a tag b alí nas aspas OK.

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)