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

Busca com acento e sem acento


mcorujao

Pergunta

Bom dia,

Estive buscando por uma String SQL para efetuar uma busca por palavras com e sem acento independente de como a pessoa digitar a palavra.

Encontrei está funçãozinha no forum:

LINK PARA O POST

busca=split(request("palavra"),chr(32))
dim onde
for x = 0 to Ubound(busca)
  if x > 0 then
     onde=onde + " and "
  end if
  pesq=busca(x) 
  pesq = replace(pesq,"a","[a,á,à,ã,â,ä,A]")
  pesq = replace(pesq,"e","[e,é,è,ê,ë,E]")
  pesq = replace(pesq,"i","[i,í,ì,î,ï,I]")
  pesq = replace(pesq,"o","[o,ó,ò,õ,ô,ö,O]")
  pesq = replace(pesq,"u","[u,ú,ù,û,ü,U]")
  pesq = replace(pesq,"c","[c,ç]")
  onde=onde+"texto like '%" & pesq & "%'"
next

sql = "select * from texto where " & onde

Esta função me serviu perfeito para palavras sem acentos, traz tudo que é palavra com acento mesmo que a digitada pelo usuário não tenha.

Demorei muito para encontrar esta função aqui no fórum, e como o post estava bem bagunçado com outras discuções, decidi postar aqui para os que queiram usar ou para que fique mais fácil achar.

Link para o comentário
Compartilhar em outros sites

20 respostass a esta questão

Posts Recomendados

  • 0

Legal, mas como você conseguiu executar essa função no banco de dados? você consegue alterar todas as palavras com acento vindas do formulário de pesquisa, até ai ótimo, mas se a palavra tiver acentuada no banco de dados como você faz?

Link para o comentário
Compartilhar em outros sites

  • 0

Só acrescentando uma coisa:

Para funcionar com maiúsculas e minúsculas, faça isso:

busca=split(request("palavra"),chr(32))
dim onde
for x = 0 to Ubound(busca)
  if x > 0 then
     onde=onde + " and "
  end if
  pesq=busca(x)
  pesq = UCASE(pesq) 'Converte para maiúsculas
  pesq = replace(pesq,"a","[a,á,à,ã,â,ä,A]")
  pesq = replace(pesq,"e","[e,é,è,ê,ë,E]")
  pesq = replace(pesq,"i","[i,í,ì,î,ï,I]")
  pesq = replace(pesq,"o","[o,ó,ò,õ,ô,ö,O]")
  pesq = replace(pesq,"u","[u,ú,ù,û,ü,U]")
  pesq = replace(pesq,"c","[c,ç]")
  onde=onde+"UCASE(texto) like '%" & pesq & "%'"
next

sql = "select * from texto where " & onde

Link para o comentário
Compartilhar em outros sites

  • 0
Hicaro, pelo que entendi é o contrário... ele tira os acentos do resultado da pesquisa do bd, e não das variaveis que vem do form...

Não, Rafael !

Olha ali:

busca=split(request("palavra"),chr(32))
Ele procura pelo "espaço" entre uma palavra e outra e cria um array com os valores que ele pegou no request.form Edit: Vi agora, tá escrito apenas "request"... Não seria request.form ??
busca=split(request.form("palavra"),chr(32))

Link para o comentário
Compartilhar em outros sites

  • 0

É... mas os replaces é em pesq... e não em palavra...

Pelo que entendi... a lógica dessa função é em tirar os acentos tanto da palavra que está sendo consultado como dos resultados que vem do bd...

Mas mesmo que não seja isso... difícil saber examinando apenas esse trecho... não é uma coisa difícil de fazer não. Basta tirar os acentos com replaces das palavras que estão sendo consultadas assim como do recordset resultado da consulta antes da comparação... criando condicionais e tal...

enfim... acho que era isso...

Abração...

Link para o comentário
Compartilhar em outros sites

  • 0

Não é no BD não... e sim no objeto recordset de uma consulta ao bd... Ou seja, o replace é nos resultados da consulta... eu testei aqui e o funcionamento é exatamente da forma como expliquei nos posts anteriores... o repace é nos resultados do BD sim... e não na variavel que vem do form...

Abração a todos...

Link para o comentário
Compartilhar em outros sites

  • 0

Rafael, tem que ser nas variáveis que vem do form !

Olha isso aí:

busca=split(request("palavra"),chr(32))
dim onde
for x = 0 to Ubound(busca)
  if x > 0 then
     onde=onde + " and "
  end if
  pesq=busca(x)
  pesq = UCASE(pesq) 'Converte para maiúsculas
  pesq = replace(pesq,"a","[a,á,à,ã,â,ä,A]")
  pesq = replace(pesq,"e","[e,é,è,ê,ë,E]")
  pesq = replace(pesq,"i","[i,í,ì,î,ï,I]")
  pesq = replace(pesq,"o","[o,ó,ò,õ,ô,ö,O]")
  pesq = replace(pesq,"u","[u,ú,ù,û,ü,U]")
  pesq = replace(pesq,"c","[c,ç]")
  onde=onde+"UCASE(texto) like '%" & pesq & "%'"
next

sql = "select * from texto where " & onde
Ele pega os dados que recebeu via request.form (ou querystring) e procura pelo espaço (chr(32)), armazenando cada um no array busca
busca=split(request("palavra"),chr(32))
Faz um loop para percorrer todos os elementos do array busca
for x = 0 to Ubound(busca)
Converte para maiúsculas (para que não haja diferença entre maiúscular e minúsculas) e dá um replace nos acentos
pesq = UCASE(pesq) 'Converte para maiúsculas
  pesq = replace(pesq,"a","[a,á,à,ã,â,ä,A]")
  pesq = replace(pesq,"e","[e,é,è,ê,ë,E]")
  pesq = replace(pesq,"i","[i,í,ì,î,ï,I]")
  pesq = replace(pesq,"o","[o,ó,ò,õ,ô,ö,O]")
  pesq = replace(pesq,"u","[u,ú,ù,û,ü,U]")
  pesq = replace(pesq,"c","[c,ç]")
Monta a próxima instrução SQL
onde=onde+"UCASE(texto) like '%" & pesq & "%'"
Continua o loop e depois faz a busca com as instruções que foram geradas
next

sql = "select * from texto where " & onde

Link para o comentário
Compartilhar em outros sites

  • 0

Pra mim funcionou...

Testei procurando por palavras acentuadas, onde no bd estavam sem acentos e retornou direitinho... tb fiz o oposto.... testei palavras sem acentos onde no BD estavam acentuadas e funcionou legal tb...

Exatamente da forma como está escrito nos posts anteriores e no link anterior tb!

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoa, desculpe a ignorância, mas poderiam me ajudar a inserir este código para o meu código gerado pelo Dreamweaver?

// INÍCIO DA PÁGINA

<?php require_once('Connections/connPMMC.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$search_rsResultado = "-1";
if (isset($_GET['search'])) {
  $search_rsResultado = $_GET['search'];
}
mysql_select_db($database_connPMMC, $connPMMC);
$query_rsResultado = sprintf("SELECT * FROM noticias WHERE noticias.texto LIKE %s ORDER BY noticias.noticia_ID DESC", GetSQLValueString("%" . $search_rsResultado . "%", "text"));
$rsResultado = mysql_query($query_rsResultado, $connPMMC) or die(mysql_error());
$row_rsResultado = mysql_fetch_assoc($rsResultado);
$totalRows_rsResultado = mysql_num_rows($rsResultado);
?>

// AQUI ESTÁ O HEAD E TODO O HTML

<?php
mysql_free_result($rsResultado);
?>

// FIM DA PÁGINA

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde pessoal,

Quem quiser consultar uma informação no banco que JÁ ESTÁ com acentuação, basta utilizar "collate sql_latin1_general_cp1251_ci_as" antes do LIKE:

select * from tbPessoas where Nome collate sql_latin1_general_cp1251_ci_as like '%Éder%'

Acabei de descobrir isso aqui, só passei pra compartilhar com vocês.

Link para o comentário
Compartilhar em outros sites

  • 0
Em 08/02/2008 em 10:49, mcorujao disse:

Bom dia!

Não estou conseguindo aplicar esse código no ACCESS, tenho um filtro que ao digitar na caixa de busca, já vai filtrando os nomes. Porem quando cadastrados com acentos no banco de dados não aparece no filtro, a não ser que seja buscado já com acentos.

Queria ao digitar sem acento, buscasse todos os cadastros, tanto com acento como os sem.

Alguém poderia me ajudar? Desde já agradeço a todos!

 

Citar

 

 

Bom dia,

 

Estive buscando por uma String SQL para efetuar uma busca por palavras com e sem acento independente de como a pessoa digitar a palavra.

 

Encontrei está funçãozinha no forum:

LINK PARA O POST

 

 

busca=split(request("palavra"),chr(32))
dim onde
for x = 0 to Ubound(busca)
  if x > 0 then
     onde=onde + " and "
  end if
  pesq=busca(x) 
  pesq = replace(pesq,"a","[a,á,à,ã,â,ä,A]")
  pesq = replace(pesq,"e","[e,é,è,ê,ë,E]")
  pesq = replace(pesq,"i","[i,í,ì,î,ï,I]")
  pesq = replace(pesq,"o","[o,ó,ò,õ,ô,ö,O]")
  pesq = replace(pesq,"u","[u,ú,ù,û,ü,U]")
  pesq = replace(pesq,"c","[c,ç]")
  onde=onde+"texto like '%" & pesq & "%'"
next

sql = "select * from texto where " & onde

 

 

Esta função me serviu perfeito para palavras sem acentos, traz tudo que é palavra com acento mesmo que a digitada pelo usuário não tenha.

 

Demorei muito para encontrar esta função aqui no fórum, e como o post estava bem bagunçado com outras discuções, decidi postar aqui para os que queiram usar ou para que fique mais fácil achar.

 

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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...