+2

Palavras acentuadas com ajax

criado por Fabrício Nogueira Magri em 25/01/2006 6:49am
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.

Comentários:

Mostrando 1 - 10 de 31 comentários
Eduardo Nunes disse:
eu encontrei a solução para esse problema simplesmente utilizando a funcao utf8_encode() antes de exibir o resultado.


EX:

<option value="*"><? echo ucfirst(utf8_encode($string)) ?></option>


É isso ae, espero ter ajudado

Abraços a todos
21/10/2006 4:43am (~17 anos atrás)

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
12/10/2006 9:35am (~17 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)... ;)
11/10/2006 10:21pm (~17 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.
11/06/2006 3:11pm (~18 anos atrás)

Cara isso caiu do seu, execelente msm valew cara!
07/05/2006 8:45pm (~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 &nbsp;
no xml vc preciza por assim: %26nbsp;

;))) vlw fuiz
28/03/2006 6:15am (~18 anos atrás)

Felipe Hlibco disse:
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
26/03/2006 10:37pm (~18 anos atrás)

Quebrou um galhão... Funcionou perfeitamente... E olha que tava dando muito pau..
Valeu!
25/03/2006 10:41am (~18 anos atrás)

a disse:
Funciona perfeitamente comigo se eu colocar um HTMLEntities nas saídas, antes de passar pelo Java...

Fica uma beleeeeeza! =)
22/03/2006 4:44pm (~18 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)