Galera boa tarde…
Recentemente tive problema com minha consulta PHP/MYSQL, em determinadas consultas com acentos ele me trazia o resultado esperado e em outras não. Fiz uma pesquisa uma pesquisa na net e encontrei esse material muito legal, vale apenas usar..
A FUNÇÃO
<?
/*******************************************************************************
Exemplo do artigo “PESQUISA COM ACENTOS DENTRO DO MYSQL”
-
drSolutions – Tecnologia e Informática
-
Diego M. Rodrigues
diego@drsolutions.com.br
——————————————————————————-
Função que Montas as REGEXP
Rev. Ago/2007
*******************************************************************************/
function stringParaBusca($str) {
//Transformando tudo em minúsculas
$str = trim(strtolower($str));
//Tirando espaços extras da string… “tarcila almeida” ou “tarcila almeida” viram “tarcila almeida”
while ( strpos($str,” “) )
$str = str_replace(“ “,” “,$str);
//Agora, vamos trocar os caracteres perigosos “ã,á…” por coisas limpas “a”
$caracteresPerigosos = array (“Ô,”ã”,”Õ”,”õ”,”á”,”Á”,”é”,”É”,”í”,”Í”,”ó”,”Ó”,”ú”,”Ú”,”ç”,”Ç”,”à”,”À”,”è”,”È”,”ì”,”Ì”,”ò”,”Ò”,”ù”,”Ù”,”ä”,”Ä”,”ë”,”Ë”,”ï”,”Ï”,”ö”,”Ö”,”ü”,”Ü”,””,”Ê”,”Δ,”Ô”,”Û”,”â”,”ê”,”î”,”ô”,”û”,”!”,”?”,”,”,”“”,”””,”-”,”\”",”\\”,”/”);
$caracteresLimpos = array (“a”,”a”,”o”,”o”,”a”,”a”,”e”,”e”,”i”,”i”,”o”,”o”,”u”,”u”,”c”,”c”,”a”,”a”,”e”,”e”,”i”,”i”,”o”,”o”,”u”,”u”,”a”,”a”,”e”,”e”,”i”,”i”,”o”,”o”,”u”,”u”,”A”,”E”,”I”,”O”,”U”,”a”,”e”,”i”,”o”,”u”,”.”,”.”,”.”,”.”,”.”,”.”,”.” ,”.” ,”.”);
$str = str_replace($caracteresPerigosos,$caracteresLimpos,$str);
//Agora que não temos mais nenhum acento em nossa string, e estamos com ela toda em “lower”,
//vamos montar a expressão regular para o MySQL
$caractresSimples = array(“a”,”e”,”i”,”o”,”u”,”c”);
$caractresEnvelopados = array(“[a]“,”[e]“,”[i]“,”[o]“,”[u]“,”[c]“);
$str = str_replace($caractresSimples,$caractresEnvelopados,$str);
$caracteresParaRegExp = array(
“(a|ã|á|à|ä|â|ã|á|à|ä|â|Ã|Á|À|Ä|Â|Ã|Á|À|Ä|Â)”,
“(e|é|è|ë|ê|é|è|ë|ê|É|È|Ë|Ê|É|È|Ë|Ê)”,
“(i|í|ì|ï|î|í|ì|ï|î|Í|Ì|Ï|Î|Í|Ì|Ï|Î)”,
“(o|õ|ó|ò|ö|ô|õ|ó|ò|ö|ô|Õ|Ó|Ò|Ö|Ô|Õ|Ó|Ò|Ö|Ô)”,
“(u|ú|ù|ü|û|ú|ù|ü|û|Ú|Ù|Ü|Û|Ú|Ù|Ü|Û)”,
“(c|ç|Ç|ç|Ç)” );
$str = str_replace($caractresEnvelopados,$caracteresParaRegExp,$str);
//Trocando espaços por .*
$str = str_replace(” “,”.*”,$str);
//Retornando a String finalizada!
return $str;
}
?>
CHAMADA PARA EXECUTAR A FUNÇÃO
$str=stringParaBusca($textoProcurado);
$sql = “SELECT * FROM noticias WHERE noticia REGEXP \”" . $str . “\”";
OBS.: a grande sacada é a utilização de Sintaxe de Expressões Regulares do MYSQL, para saber mais sobre Expressões regulares acesse http://dev.mysql.com/doc/refman/4.1/pt/regexp.html
Forte abraço.