Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro Nigre

[Resolvido] sistema não busca palavras com acentos

Recommended Posts

Pessoal, preciso que ajudem-me a alterar meu código. To fazendo um site no DW usando php/mysql. Fiz um sistema de busca para o cliente pesquisar por palavra-chave, mas quando fui testar, percebi que o mecanismo não aceita palavras acentuadas, ou seja, só traz resultados de palavras sem acentos inseridas no form. Eu peguei um código que promete resolver o problema, mas não estou conseguindo adaptá-lo à minha página.

 

MINHA PÁGINA

// inicio 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

 

E a função que achei na internet é essa:

 

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

 

Alguém poderia me ajudar? Saberiam inserir essa função na minha página?

 

Valeu,

 

Leandro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Leandro Nigre,

 

vai ser uma boa se nós conseguirmos resolver esse dilema ai,

 

cara você ja testou diretamente no banco se o seu select faz diferença entre os caracteres que acompanhão acentos,

pode ser o charset, o collate do banco, procura sobre isso e veja o que é mais indicado fazer (php ou banco).

e responde se der certo ou errado essa dica.

 

até a proxima...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Verifique a configuração do seu collation, não deve dar problema em nenhum tipo de busca se a configuração de character set e collation/b] estiverem corretas.

 

Valewww...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Num outro fórum, me disseram que o código para ignorar a acentuação está em asp... como uso php, no way.

Com relação à collation, no meu BD está latin1_swedish_ci

Como configuro esse character set?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fazendo busca direto no BD, usando o LIKE '%...%', posso digitar tanto com ou sem acento, maiscúla ou minúscula que ele retorna os resultados certinho. Isso signfica o que? O problema está no php?

 

Valew

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa pera ae,

 

você fez o select no banco assim:

select campo from tabela where campo like'%á%'

retornou algo do tipo:

á

Á

a

A

 

se foi isso seu collate deveria ser trocado (af não lembro é latin alguma coisa)

o link abaixo vai lhe auxiliar a troca e a escolha do collate, as duvidas que os participantes do post tiveram é bastante comum creio que sera bem util.

 

http://forum.imasters.com.br/index.php...rt=#entry720091

 

ok?...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que acontece é o seguinte:

 

Meu SQL está assim: SELECT * FROM tabela WHERE campo LIKE '%search%' (sendo que search é uma variavel que pega o valor inserido no formulario de busca pelo parametro de URL) e no Bd os caracteres estão certos, com acentos, maiuscúlas e minúsculas..

 

Mas na busca, se digito um palavra acentuada, por exemplo "salário", ele não retorna nenhum resultado. Já se digito a mesma palavra sem acento, "salario", ele traz todos os resultados que tem a palavra "salário", "salario", "SALÁRIO", etc...

 

Quero possibilitar ao usuário digitar a palavra como ela é, com ou sem acento...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi,

 

você precisa de uma função do seu php que quando o cara digitar 'a' ou 'A' ou 'á' ou 'Á' va para o banco apenas a ou 'A' mais precisamente 'a'.

ou seja sua função no inicio do post.

 

 

aquele codigo seu ta meio esquisito pra PHP.

 

crie a sua propia função baseada na que você esta tentando usar, creio que isso resolva

vai ai minha dica:

 

ja que é na base do replace toda vez que alguem clicar em procurar no seu sistema, via post você pega a string e passa de parametro para a função.

 

if(isset ($_POST['procurar')){

 

função($_POST['palavra']);

 

}

ja que temos acentos apenas em a, e, i, o, u

sua função iria fica coisa do tipo

 

function filtra_acento($var){

1º $var = tratamento das letras 'a' da string($var); /*tranformar á, Á, A em a*/

2º $var = o que ja foi feito e joga tratando para 'b';

e assim vai da um return nela e boa.

 

caso seja no PHP mesmo sentiria mais a vontade de te ajudar no topico especifico de PHP caso tenha dificuldade na sintax e semantica (me avise).

 

t+

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

ALTER TABLE nomedatabela CHARACTER SET latin1 COLLATE latin1_general_ci

 

Se não der certo tenta outro collation, normalmente latin1_swedish_ci também resolve.

 

Valewww...

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas se você quiser tratar e transformar o resultado por função faça o seguinte:

 

$caracter_especial = array("á","é","í","ó","ú","Á","É","Í","Ó","Ú"........);

 

$caracter_normal = array("A","E","I","O","U","A","E","I","O","U"........);

 

$variavelpostada = str_upper( str_replace($caracter_especial, $caracter_normal, $variávelpostada) );

 

onde str_replace transforma cada caracter_especial em caracter_normal, da variavelpostada para a mesma variavelpostada.

 

onde str_upper transforma todo resultado anterior em maiúsculas.

 

Mas acho trabalhoso porque você precisa prever todos os caractéres dentro dos arrays $caracter_especial.

 

Valewww...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha samirbh, acho que você acertou o X daquestão... Essa função para substituir os caracteres com acentos por caracteres simples antes de submeter o formulário deve resolver... Se você puder me ajudar com o código, ficaria mui grato. Vou criar um tópico na área de PHP e passo aqui pra deixar o link.

 

Grato pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

muitos aqui assim como eu optariam por fazer isso no banco atravez do collate mas como nesse mundo da informatica tudo é dinamico dou total apoio tambem a você resolver isso na aplicação.

estou no aguardo do link.

 

Grato em poder lhe ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, ainda não consegui solucionar o problema, mas tenho um informação que pode ajudar...

 

Se no formulário de busca da página busca.php eu digito uma plavra sem acento, como "salario", ele submete e na página resultado.php traz os resultados. Ainda nesta pa´gina, o endereço de URL fica assim: http://localhost/site/resultado.php?search=salario

 

Agora, se busco por "salário", o sistema não traz resultados, e o endereço de URL fica assim:

http://localhost/site/resultado.php?search=sal%C3%A1rio

 

E aí?

Compartilhar este post


Link para o post
Compartilhar em outros sites

[RESOLVIDO]

 

O problema era no charset da página busca, que estava diferente do charset da página resultado... Agora está tudo charset=iso-8859-1

 

Valeu pessoal!!

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.