Ir para conteúdo

POWERED BY:

Arquivado

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

GeorgeLOL

acentuação nas variáveis com problema

Recommended Posts

olá. estou fazendo um site em ajax, e resolvi o problema dos acentos usando:

 

header("Content-Type: text/html;  charset=ISO-8859-1",true);

mas surgiu outro problema (no IE isso não acontece, só no FF): quando eu envio por ajax uma página com uma variável GET, se seu valor tiver acentos, ela sai com problemas na codificação:

 

xmlhttp.open('GET', 'pagina.php?var1=valor1&var2=valor2', true)

já procurei no fórum mas não encontrei a solução. alguém poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já forçou o header via linguagem server-side??

 

Outra coisa, você está decodificando do padrao UTF-8 para ISO-8859-1 quando chega no servidor??

Compartilhar este post


Link para o post
Compartilhar em outros sites

como disse acima, usei o header() do php para fazer isso...bem, tentei usar o encodeURI() mas mesmo assim não deu certo. veja meu código:

 

<script type="text/javascript">
<!--

set_xmlhttp();
xmlhttp.onreadystatechange = function() {
	if (xmlhttp.readyState == 4) {
		document.getElementById('lol').innerHTML = xmlhttp.responseText;
	}
}

variavelAcentuada="ÉáóòèçüË"
var url = "http://localhost/documentos/Testes/encodeURI_engine.php?aoa="+encodeURI(variavelAcentuada);

xmlhttp.open('GET', url, true);
xmlhttp.send(null);


-->
</script>

e no encodeURI_engine.php:

<?php header("Content-Type: text/html; charset=ISO-8859-1", true); ?>

<?=$_GET['aoa']?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, o que acontece é o seguinte,

 

O ajax sempre converte os dados para UTF-8 na hora de enviar as informações do navegador para o servidor, ou seja, quando você envia os dados do cliente para o servidor, os caracteres especiais sempre ficarão zuados

 

No servidor, quando você receber as informações, você precisa desconverter de UTF-8 para ISO-8859-1, usa a função utf8_decode() no $_GET['aoa'] que deve fazer isso

 

Se tudo ocorrer bem, depois do utf8_decode(), você deve ter novamente tudo acentuado e "bunitinhu"

 

Só pra complementar o código header("Content-Type: text/html; charset=ISO-8859-1",true); serve para forçar a enviar do servidor para o cliente os dados no formato ISO-8859-1, se tiver algum dado UTF-8 na hora do envio ele converte. Esse comando não converte os dados no recebimento do servidor

 

É complicado discutir isso pq existem 2 envios e cada comando converte os dados para ISO-8859-1 em cada momento, só para mostrar:

O primeiro é quando o usuário envia do navegador(cliente) para o servidor -> servidor usa utf8_decode() para converter para ISO-8859-1 os dados recebidos

O segundo é quando o servidor envia a página para o navegador(cliente) -> servidor usa header() para converter os dados para ISO-8859-1 na hora do envio

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado! fiz o que você disse, deu certo no FF mas não no IE. mas encontrei outra solução que funciona nos dois navegadores: uso o urlencode() para enviar com o send() do ajax:

 

send('GET', 'pagina.php?aoa='+<?=urlencode('áááááãããã')?>)

e uso o urldecode pra receber

 

pagina.php:
<?=urldecode($_GET['aoa'])?>

isso resolveu meu problema, obrigado pela ajuda! :}

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.