Ir para conteúdo

Arquivado

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

Everton Figueiredo

[Resolvido] Destacar termo buscado

Recommended Posts

Olá pessoal,

 

estou montando uma sistema de busca, está perfeito só não achei uma solução para destacar a palavra buscada na lista de resultados, exemplificando o problema é o seguinte:

 

Faço a busca pelo termo "quando voce" e o título que resulta da base de dados é "Quando você acordar" no caso teria que ficar "<b>Quando você</b> acordar" negritando o termo buscado, já usei str_replace() str_ireplace() errgi_replace() mas não deu certo, alguém sabe de algum massete que possa estar resolvendo esse problema.

 

Vlw galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exato. Tudo porque str_replace() não possui nenhum tipo de delimitador, já com Expressões Regulares há ( \b )

 

Com essa função, destacar por exemplo a palavra chapéu, destacaria erroneamente o chapéuzinho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

em uma busca por 'similaridade', não acho que seria errado destacar chapéuzinho

 

a função do André, passa direto pela 'ratoeira'

O <span class="classe-css">rato</span> roeu a roupa da ratoeira do rei <span class="classe-css">rato</span> de roma .

 

para saber se é 'certo' ou 'errado' (subjetivo isso), depende apenas das especificações do problema em particular.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim William Bruno, isso aconteçe pois utilizei o delimitador de BORDA ( \b ), pois a principio eu acho errado destacar ratoeira. Agora se o problema exige que esse comportamento seja alterado, eu altero, porque não :).

 

Essa tua função funfou certinho, só que teria que destacar palavras como exemplo ratoeira e também se o usuário faz uma busca como por exemplo o termo "voce" e nas lista está Você, na sua função não destaca, tem como destacar?

 

Muito obrigado pelas dicas cara.

 

Estava procurando tb por essa alternativa em JS, mais uma vez o Jquery dando show.

 

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

só que teria que destacar palavras como exemplo ratoeira

...

 

function highlight( $t, $k, $c = 'highlighted' ) {
   return preg_replace( sprintf( '/(%s)/i', is_array( $k ) ? implode( '|', $k ) : $k ), sprintf( '<span class="%s">$1</span>', $c ), $t );
}

 

e também se o usuário faz uma busca como por exemplo o termo "voce" e nas lista está Você, na sua função não destaca, tem como destacar?

Mas é claro que não destaca amigo, desde quando "voce" é igual a "você" hehehe? Tem como destacar sim, uma maneira é comparar as palavras sem acentos. Retire os acentos de ambos os lados (do termo da pesquisa e do texto) e faça a comparação (SOMENTE na comparação, na hora de exibir, exiba o texto como ele realmente é).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz essa pergunta pq no meu select não diferencia palavras com ou sem acento, teria como você fazer esse ajuste na sua função para fazer isso?

 

Tem como fazer isso André na sua função, de não diferenciar palavras como acentos e sem acento, fico no aguardo cara. Muito obrigado mesmo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

mostre como você fez 'ela' pesquisar com acento.

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?php 

function remove_acentos( $string ) {
	// Remove acentos sobre a string
	mb_internal_encoding("UTF-8");
	mb_regex_encoding("UTF-8");
	$string = mb_ereg_replace( "[ÁÀÂÃÄ]", "A", $string);
	$string = mb_ereg_replace( "[áàâãäªa]", "a", $string);
	$string = mb_ereg_replace( "[ÉÈÊË]", "E", $string);
	$string = mb_ereg_replace( "[éèêëe]", "e", $string);
	$string = mb_ereg_replace( "[ÍÌÎÏ]", "I", $string);
	$string = mb_ereg_replace( "[íìîïi]", "i", $string);
	$string = mb_ereg_replace( "[ÓÒÔÕÖ]", "O", $string);
	$string = mb_ereg_replace( "[óòôõöºo]", "o", $string);
	$string = mb_ereg_replace( "[ÚÙÛÜ]", "U", $string);
	$string = mb_ereg_replace( "[úùûüu]", "u", $string);
	$string = mb_ereg_replace( "[Ç]", "C", $string);
	$string = mb_ereg_replace( "[ç]", "c", $string);
	$string = mb_ereg_replace( "[´`~^¨]", "", $string);
	$string = mb_ereg_replace( "´", "", $string);
	//$string = strtoupper($string);
	return $string;
}


function highlight( $t, $k, $c = 'texto_busca' ) {
	
	$tsa = remove_acentos($t);
	$ksa = is_array( $k ) ? array_map( "remove_acentos", $k ) : remove_acentos($k);
	
	$pattern = sprintf( '/(%s)/i', is_array( $ksa ) ? implode( '|', $ksa ) : $ksa );
	$replacement = sprintf( "<span class=" . "%s" . ">$1</span>", $c );
	$string = $tsa;
	
	return preg_replace($pattern, $replacement, $string);

	
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<style>

.texto_busca{
	font-weight: bold;		
}

</style>

<?php 
$valorbusca = explode(' ', 'JOSE SILVA JUNIOR');
$nome = 'ALESSANDRO JOSÉ DA SILVA JUNIOR';
print_r( highlight($nome, $valorbusca, 'texto_busca'));

?>

OFF:

 

meu post anterior foi unificado???

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.