Jump to content
Fórum Script Brasil
  • 0

Busca com acento e sem acento


mcorujao

Question

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 to comment
Share on other sites

20 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...