Ajax e os acentos
December 7th, 2006. Published under ajax, javascript, php. 7 Comments.
Neste post, irei reproduzir um outro post que eu havia escrito em Janeiro deste ano, o qual falava sobre Ajax e os acentos.
Você já “queimou a cuca” ao trabalhar com Ajax e perceber que os acentos não estão sendo exibidos corretamente? Então, passei por isso ao desenvolver uma busca instantânea com esse método. E a solução? Vou explicar-lhe neste post.
Sempre que tenho alguma dúvida durante o meu trabalho, recorro aos amigos, aos fóruns e principalmente ao Google; e foi nesse último que encontrei a solução para o meu problema, no tutorial: Ajax para quem só ouviu falar, escrito pelo Élcio.
Lembrando que trabalho com PHP e se você trabalha com outra linguagem dinâmica, faça as modificações necessárias.
No arquivo PHP, precisamos utilizar a função urlencode(). Então, teremos algo assim:
$txt = "Tenha um bom coração.";
$txt = urlencode($txt);
O texto retornado será algo assim:
Tenha+um+bom+cora%E7%E3o.
Bom, agora no javascript fazemos assim:
var resultado = ajax.responseText; // Texto retornado pela requisição do ajax.
resultado = resultado.replace(/\+/g,” “); // Substitue o “+” por um espaço.
resultado = unescape(resultado); // Desfaz o que a função urlencode(); fez.
Bom, este é o processo para termos os acentos funcionando perfeitamente em nossas aplicações em Ajax.
7 Comments
leandro on December 7th, 2006
Olá Micox,
Eu também concordo com você e até utilizo este header no arquivo server-side. Até falo a respeito dele no meu curso Web sites com Ajax.
Mas como falei no início deste post, eu apenas transcrevi um outro post que eu havia escrito no início deste ano, para ser mais específico em 3 de Janeiro.
Por que tenho vários redirecionamentos que são feitos a este blog através do referido post anterior. Somente.
Um abraço.
RR on March 8th, 2007
Eu concordo com o artigo, se eu usar o htmlentities(), eu nao poderei utilizar o retorno em caixas de texto (textarea), por que eles irao mostrar os htmlentities como são e nao de forma ç.
quanto a usar os headers, acho que tem muitas confusões, uma solução simples dessa eh muito mais aceitavel.
Mas ainda faltou colocar no blog o envio dos dados com acentos com AJAX, quando eu envio os dados eles tbm viram codigos, e estou procurando a solucao para isso.
[]
ferdinando on May 31st, 2007
Use
header(”Content-type: application/html; charset=iso-8859-1″);
no seu script php, que ele ira retornar uma pagina codificada corretamente, fiz isso aqui para o retorno de valores pesquisados no mysql, antes de começar a usar o echo, e deu tudo certo, funcionou com o ajax, com input, com tudo..
t+
marcos on August 17th, 2007
ola pessoal,
em asp como uso ?
Isaac Nathan on September 5th, 2007
eu utilizer a forma do header no php, mas quando o php passa pelo server, define o charset poe isso na primeira linha do meu codigo html: 
Um outro amigo tinha mostrado isso em uma comunidade, não lembro qual, nem a solução, mt menos o porque
admin on September 22nd, 2007
Isaac, provavelmente está ocorrendo o seguinte: sua página está salva com um charset, por exemplo, iso-8859-1. E sua página foi salva com charset utf-8. Ou vice versa.
Micox on December 7th, 2006
Opa. Beleza Leandro?
Bom cara, eu discordo desta forma de RECEBER os dados via ajax. Existem outras formas mais fáceis e mais corretas:
1) Colocando um header no arquivo server-side para corrigir o tipo de codificação como eu falo neste meu post.
2) (o que eu considero mais correto) Enviando no formato de HTML Entities para o navegador do usuário. (html entities são aquelas entidades ç para ç, etc)
Exemplo:
1. $txt = “Tenha um bom coração.”;
2. $txt = htmlentities($txt);
Dessa forma não será necessário fazer nenhuma DEcodificação no javascript
FAlows.
Testa ae