Palavras acentuadas com ajax
Este problema acontece devido aos vários tipos de caracteres. Aqui no Brasil geralmente usamos o ISO-8859-1, mas os navegadores geralmente usam como padrão para trasmitir os dados o UTF-8.
Bom, então quando enviamos o caracter "é" por exemplo, este será interpretado como UTF-8 pelo navegador, mas na verdade ele está como ISO-8859-1. Por isso aparecem aqueles caracteres malucos em vez do caracteres original.
A maneira que encontrei para resolver isso foi codificando o texto antes de enviar. Essa codificação é muito usada para transmitir dados via url.
Na ultima página do artigo, vocês encontraram um exemplo completo usando o que foi mencionado aqui.
Tutorial originalmente postado em:
www.fabriciomagri.com/forum
Fórum brasileiro sobre Ajax.
Bom, então quando enviamos o caracter "é" por exemplo, este será interpretado como UTF-8 pelo navegador, mas na verdade ele está como ISO-8859-1. Por isso aparecem aqueles caracteres malucos em vez do caracteres original.
A maneira que encontrei para resolver isso foi codificando o texto antes de enviar. Essa codificação é muito usada para transmitir dados via url.
Na ultima página do artigo, vocês encontraram um exemplo completo usando o que foi mencionado aqui.
Tutorial originalmente postado em:
www.fabriciomagri.com/forum
Fórum brasileiro sobre Ajax.
E aí Júlio...
Bom, essa minha solução realmente está ultrapassada. Eu criei isso logo no início da era ajax.
Existem comandos específicos do javascript para fazer isso como "escape" e "unescape".
Bom, mas essa sua solução vai ter problemas em alguns casos, como os dados serem enviados em outro formato diferente do ISO-8859-1, já que isso pode ser definido pelo navegador. Então usuários de outros países, ou até mesmo navegadores diferentes podem dar erro.
Recomendo vc a começar a usar comandos como eu mencionei logo acima.
Falou,
Fabrício
Bom, essa minha solução realmente está ultrapassada. Eu criei isso logo no início da era ajax.
Existem comandos específicos do javascript para fazer isso como "escape" e "unescape".
Bom, mas essa sua solução vai ter problemas em alguns casos, como os dados serem enviados em outro formato diferente do ISO-8859-1, já que isso pode ser definido pelo navegador. Então usuários de outros países, ou até mesmo navegadores diferentes podem dar erro.
Recomendo vc a começar a usar comandos como eu mencionei logo acima.
Falou,
Fabrício
12/10/2006 9:35am
(~18 anos atrás)
Apenas coloque no começo da página da onde que vem os dados
header("Content-Type: text/html; charset=ISO-8859-1",true);
Eu conselho por isso em todas as páginas não só as usadas para o ajax assim você não corre perigo de alguma coisa "estragar" os seus textos em português (Acentuados)... ;)
header("Content-Type: text/html; charset=ISO-8859-1",true);
Eu conselho por isso em todas as páginas não só as usadas para o ajax assim você não corre perigo de alguma coisa "estragar" os seus textos em português (Acentuados)... ;)
11/10/2006 10:21pm
(~18 anos atrás)
Funcionou no IE versao 6 com SP2 e no linux no mozzila versão 1.4. Ja no conqueror não teve acordo, não conseguiu instanciar o objeto XMLHttpRequest.
11/06/2006 3:14pm
(~18 anos atrás)
1) no js, o link de chamada para o form :
saveTopic: function() {
formulario = document.cadastra.elements;
param = ajax.camposForm(formulario);
// alert(param);
xmlhttp.open('POST', 'avaliacaoGrava.php', true);
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.onreadystatechange = ajax.respostasCadastro;
var param = unescape(param.replace(/\+/g," "));
xmlhttp.send(param);
},
no php, tratamento pra gravar na base de dados:
$fName = utf8_decode (trim($_POST['nome']));
$fTitle = utf8_decode (trim($_POST['titulo']));
$fEmail = utf8_decode ($_POST['email']);
$fText = utf8_decode (trim($_POST['texto']));
feito isso foi so gravar na base de dados e tudo funcionou perfeito.
saveTopic: function() {
formulario = document.cadastra.elements;
param = ajax.camposForm(formulario);
// alert(param);
xmlhttp.open('POST', 'avaliacaoGrava.php', true);
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.onreadystatechange = ajax.respostasCadastro;
var param = unescape(param.replace(/\+/g," "));
xmlhttp.send(param);
},
no php, tratamento pra gravar na base de dados:
$fName = utf8_decode (trim($_POST['nome']));
$fTitle = utf8_decode (trim($_POST['titulo']));
$fEmail = utf8_decode ($_POST['email']);
$fText = utf8_decode (trim($_POST['texto']));
feito isso foi so gravar na base de dados e tudo funcionou perfeito.
11/06/2006 3:11pm
(~18 anos atrás)
Percebi que cada um tem uma solução para isso.
Bom la vai a minha simples pratica e funcional.
aonde for gerar o xml coloca <?= urlencode($variavel);?>
no javascript q vai retornar por exempro
lista = document.getElementById('layer_resultado');
lista.innerHTML=unescape(conteudo).replace(/\+/g,' ')
basta dar replace e pronto acentuacao tudo ok ;)
uso essa solucao e nao tenho problemas
outra dica
para espaços como
no xml vc preciza por assim: %26nbsp;
;))) vlw fuiz
Bom la vai a minha simples pratica e funcional.
aonde for gerar o xml coloca <?= urlencode($variavel);?>
no javascript q vai retornar por exempro
lista = document.getElementById('layer_resultado');
lista.innerHTML=unescape(conteudo).replace(/\+/g,' ')
basta dar replace e pronto acentuacao tudo ok ;)
uso essa solucao e nao tenho problemas
outra dica
para espaços como
no xml vc preciza por assim: %26nbsp;
;))) vlw fuiz
28/03/2006 6:15am
(~19 anos atrás)
Pessoal, resolvi este problema de uma forma muitooo simples. Na página que contém o formulário de envio de dados usei o seguinte cabeçalho:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
Desta forma estamos identificando a codificação dos dados da página corrente para UTF-8, e não o ISO (que é muito comum ser tomado como padrão).
Logo, quando vc escrever algo no formulário e enviar para o banco de dados, ele já vai codificado pra UTF-8, e na volta, sua página irá retornar certinho, pq com essa META TAG, ela irá interpretar o conjunto de símbolos.
Resumindo, não precisa criar função em JS pra interpretar o texto. Bom, certifique-se de colocar esse Header acima, tanto nas páginas q contém os formulários, como nas páginas que serão Lidos os dados. Assim vc irá Escrever em UTF-8 e depois Ler em UTF-8.
Desculpe-me escrever meio rápido, mas é o sono. Qq dúvida escrevam-me.
[]s
Felipe Hlibco
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
Desta forma estamos identificando a codificação dos dados da página corrente para UTF-8, e não o ISO (que é muito comum ser tomado como padrão).
Logo, quando vc escrever algo no formulário e enviar para o banco de dados, ele já vai codificado pra UTF-8, e na volta, sua página irá retornar certinho, pq com essa META TAG, ela irá interpretar o conjunto de símbolos.
Resumindo, não precisa criar função em JS pra interpretar o texto. Bom, certifique-se de colocar esse Header acima, tanto nas páginas q contém os formulários, como nas páginas que serão Lidos os dados. Assim vc irá Escrever em UTF-8 e depois Ler em UTF-8.
Desculpe-me escrever meio rápido, mas é o sono. Qq dúvida escrevam-me.
[]s
Felipe Hlibco
26/03/2006 10:37pm
(~19 anos atrás)
Quebrou um galhão... Funcionou perfeitamente... E olha que tava dando muito pau..
Valeu!
Valeu!
25/03/2006 10:41am
(~19 anos atrás)
Funciona perfeitamente comigo se eu colocar um HTMLEntities nas saídas, antes de passar pelo Java...
Fica uma beleeeeeza! =)
Fica uma beleeeeeza! =)
22/03/2006 4:44pm
(~19 anos atrás)
EX:
<option value="*"><? echo ucfirst(utf8_encode($string)) ?></option>
É isso ae, espero ter ajudado
Abraços a todos