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

Problemas com Acentuação Ajax/PHP


suicidebilly

Pergunta

Estou com um problema que já tomou boa parte do meu dia... vou tentar encurtar ao máximo

Utilizo uma função em AJAX que faz uma busca no banco de dados e "autocompleta" os demais campos (Endereço, Telefone e etc) ao se preencher o nome do cliente corretamente.

O valor para consulta é obtido pelo conteúdo de um textfield chamado clientID

function getClientData()
    {
        var clientId = document.getElementById('clientID').value;

        if(clientId!=currentClientID){
            currentClientID = clientId
            ajax.requestFile = 'getClient.php?getClientId='+clientId;    
            ajax.onCompletion = showClientData;    
            ajax.runAJAX();            
        }
        
    }
O Arquivo getClient.php efetua uma busca na tabela utilizando o valor obtido com $_GET.::
$res = mysql_query("SELECT * FROM tabela WHERE cliente='".$_GET['getClientId']."'") or die(mysql_error());
Se o campo não tiver nenhum acento funciona perfeitamente (FireFox, Ie, Chrome, etc), porém, se tiver algum acento no campo de busca nenhum resultado é retornado, verifiquei como chegava (ou como era exibido) o resultado do $GET na página de consulta (getClient.php) e as palavras com acento chegam truncadas, por isso a busca dava errado, fiz então o seguinte.:: 1) Na página onde estão os campos TextField utilizo.::
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br">
<head>
2) Na página getClient.php utilizo.::
header("Content-Type: text/html; charset=ISO-8859-1",true);
Isso faz com que o resultado venha acentuado corretamente, mas aí que entra o problema que não consigo entender.:: 1) Se dentro do getClient.php eu tentar pegar o valor do GET para consulta utilizando.::
$res = mysql_query("SELECT * FROM tabela WHERE cliente='".$_GET['getClientId']."'") or die(mysql_error());
Funciona no Internet Explorer. Mas não funciona no FireFox. 2) Pensei em utilizar utf8_decode no GET para poder efetuar a consulta.
$res = mysql_query("SELECT * FROM tabela WHERE cliente='".utf8_decode($_GET['getClientId'])."'") or die(mysql_error());

Fazendo isso funciona no FireFox mas deixa de funcionar no Internet Explorer.

--------

Pensei em uma solução (Ao meu ver porca) que funciona parcialmente, utilizo uma função em PHP que verifica qual o navegador e utiliza a versão com ou sem o decode, porém isso não funciona em outros navegadores como Chrome e Opera.

Alguém sabe me explicar porque isso acontece ? Porque quando funciona em um navegador não funciona em outro ???

As vezes o que mais me tira a vontade de desenvolver sistemas elaborados é esta falta de compatibilidade entre os navegadores, a cada novo navegador que lançam me bate um pensamento que é um problema a mais pra lidar na hora de desenvolver algo... passo horas tentando deixar algo compatível com um e perco a compatibilidade com o outro... acredito que outros também pensem assim... mas enfim... agradeço muito qualquer ajuda nesse problema !

Obs.: Todos os campos da minha tabela estão em utf8_general_ci e todos os headers estão devidamente setados, já tentei alterar os headers para UTF8 mas os acentos chegam truncados. Já tentei usar url encode mas o erro no final é o mesmo.

Editado por suicidebilly
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Bom, já que funciona de um modo no ie e no ff de outro, é só você identificar o browser, é talvez a melhor gambiarra a ser feita, mas você já tentou setar a codificação do se bd logo após fazer a conexão? Eu já tive vários problemas assim, mas depois que comecei a fazer isso, nunca mais me deu problema.

Link para o comentário
Compartilhar em outros sites

  • 0

eu tive o mesmo o problema vou postar uma funcao q acentua corretamente para vc:

<?php
function trocaAcento( $string ) { 
 $search = array( 'á', 'à', 'ã', 'é', 'ê', 'í', 'ó', 'õ', 'ú', 'ç' );
 $replace = array( '&aacute;', '&acrase;', '&atilde;', '&eacute;', '&ecirc;', '&iacute;', '&oacute;', '&otilde;', '&uacute;', '&ccedil;' );
 return str_replace($search, $replace, $string); 
} 


$conn = mysql_connect("seu servidor","seuusuario","suasenha");
mysql_select_db("seu_banco_de_dados_aki",$conn);

if(isset($_GET['getCountriesByLetters']) && isset($_GET['letters'])){
 $letters = $_GET['letters'];
 $letters = preg_replace("/[^a-z0-9 ]/si","",$letters);
 $res = mysql_query("select id, cliente from sistema.clientes where cliente like '".$letters."%'") or die(mysql_error());
 while($inf = mysql_fetch_array($res)){
  echo $inf["id"]."###".trocaAcento($inf["cliente"])."|";
 }    
}
?>

olha amigo coloca essa funcao no seu getclientes.php q o ajax carrega q funciona...

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