Ir para conteúdo

POWERED BY:

Arquivado

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

sBrasil

[Resolvido] Ajax e charset iso-8859-1

Recommended Posts

Olá, pessoal!

Eu queria saber como usar ajax com charset=iso-8859-1 sem ter problemas. Já vim vários tópicos aqui e não encontrei nada que resolva o meu problema.

A questão é que Tudo que tenho(site,bd, servidor etc) estão configurados para funcionar com charset=iso-8859-1. Quando uso requições tradicionais de páginas tudo sai perfeito. Mas quando faço em ajax os dados chegam a pagina php como utf-8. Usei uma função php para converter de de uft-8 para iso-8859-1. A acentuação ficou ok! Mas o ™ não é convertido corretamente. Essa função não funciona corretamente.

 

A minha grande dúvida é que por que o ajax não pode fazer requisições em iso-8859-1. Quando faço requisições tradicionais tudo funciona bem mas quando uso ajax, o mesmo parece só querer enviar dados para o servidor no formato uft-8.

 

Já tentei usar: setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=iso-8859-1');

Mas, parece que não adianta nada!

 

E agora quem pode me ajudar????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o seguinte quando for montar os valores para enviar por ajax faça como nesse exemplo:

 

nome=escape(document.getElementById("txtNome").value);

 

e no php (se utilizar POST se for GET não é necessário):

 

$nome = rawurldecode($_POST['nome']);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente isso, mande normalmente em UTF8 e na página de retorno você utiliza:

 

<?php

header("Content-type: text/html; charset=iso-8859-1"); // Header

$var = utf8_decode($_POST['var']); //Transformando caracteres

?>

 

Espero que ajude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tentando mandar como iso-8859-1 mas não adianta nada!

 

Olá, Marcio LR, eu já tive essa sua idéia e estou usando usando ela mesma! Eu já havia encontrado essa solução e estou usando-a no momento! Mas, o que eu queria mesmo com esse post era encontrar uma maneira de fazer requisições no formato ISO-8859-1, pelo jeito não é possível!

 

Um abraço a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha ja fazem 2 anos q este topico esta morto, porem eu estava com o mesmo problema, e procurando no google achei este topico.

 

Como este topico não traz uma solução cabivel, estou postando uma solução que funcionou comigo, para que outros que encontre este topico através do google tenham exito na sua busca.

 

Para fazer uma chamada com charset iso-8859-1 basta definir no type do script quando for chama-lo na sua página html

 

Assim

<script type="text/javascript; charset=iso-8859-1" language="javascript" src="script_ajax.js"></script>

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpem a coveiragem logo no primeiro post mas estou com um problema que não consigo resolver...

 

É o seguinte: tenho uma página que faz a leitura de um arquivo texto (bannedextensionlist do dansguardian) e imprime ele numa textarea para o usuário alterar. Ao clicar em salvar, a textarea é reenviada (via POST) para um CGI em Perl, que a recebe e grava o arquivo com seu conteúdo. O problema é que na chegada ao Perl a codificação fica toda avacalhada, detonando o arquivo... Imagem Postada

 

Minha função de post está assim:

$(function () {    $("#alterar").click(function(){      $.post("[% path_cgi %]?webfilter_banidos",        {          acao: "ban_extensoes",          evento: "salva",          caixatexto: document.getElementById('txt_banidos_extensoes').value        }      );      alert("ARQUIVO GRAVADO COM SUCESSO!");      history.back(-1);    });    });
Procurei no Google de montão e já coloquei no código:

<meta http-equiv="Content-Type" content="text/html" charset="ISO-8859-1">  <script src="[% path_html %]/jquery.js" type="text/javascript" charset="iso-8859-1"></script><form accept-charset="ISO-8859-1" action="post">
E nada funciona, sempre avacalha o encoding. Tentei ainda usar encodeURI para passar para o Perl, mas não consegui descodificar por lá depois... Vi alguns exemplos em PHP na net, nada de Perl... E infelizmente não posso trocar de linguagem.

 

 

Por último tentei com AJAX, também sem sucesso...

 

function Salvar(){      var valor = encodeURI(document.getElementById('txt_banidos_extensoes').value);      alert(valor);      valor = valor.replace(/#/g,'§');      alert("novo valor"+valor);      var ajax = ajaxFunction();				var url = '[% path_cgi %]?enviaajax&acao=ban_extensoes&evento=salva&caixatexto=' + valor;        alert(url);				ajax.onreadystatechange=function(){			    if(ajax.readyState==4){			    	var resposta = ajax.responseText;						alert (resposta);			    }			  }			 	ajax.open('GET',url,true);			 	ajax.send(null);	    }
Alguém pode dar uma luz?

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o ajax do jquery sempre envia em UTF-8

 

http://api.jquery.com/jQuery.ajax/

Data will always be transmitted to the server using UTF-8 charset; you must decode this appropriately on the server side.

com o 'ajax puro', você pode mudar o header:

xmlhttp.setRequestHeader('encoding','ISO-8859-1');

com CGI, não sei como você deve proceder para 'mudar o encoding'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe pelo post avacalhado de antes, no próximo eu faço melhor! Imagem Postada

 

Muitíssimo obrigado William Bruno, salvou meu dia! :clap:

 

Eu tava passando (esqueci de colar aqui :ermm: ) esta variável, mas tava como

xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=iso-8859-1");
e não funcionava de jeito nenhum. Foi só mudar pra

 

xmlHttp.setRequestHeader('encoding','ISO-8859-1');
que funcionou perfeitamente! Valeu mesmo! Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum.. na verdade, dependendo do que você estiver fazendo, não faz mal nenhum enviar os dois juntos:

xmlHttp.setRequestHeader('encoding','ISO-8859-1');xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=iso-8859-1");

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

E para solucionar utilizando o jQuery?

 

Interessante que no HTML e no ASP padronizei como codificação UTF-8 mesmo assim o problema persistiu trazendo ç ã da vida...

 

Meu codigo jQuery

$(document).ready(function() {	

// Contact Form
var cForm = $("#contactForm");  
var cinputName = cForm.find("#nome"); 
var cinputEmail = cForm.find("#email");  
var cinputAssunto = cForm.find("#assunto");  
var cinputMessage = cForm.find("#mensagem");
var cresponseText = cForm.find("#response");
var cformulariosText = cForm.find("#formularios");
var cbotao = cForm.find("#botao");

// On Submitting  	
cForm.bind("submit", function(e){
	if(validateName(e, cinputName) & validateEmail(e, cinputEmail) & validateAssunto(e, cinputAssunto) & validateMessage(e, cinputMessage)) { 
		ajaxSend(cForm, cresponseText,cformulariosText, cbotao);
	};
	return false;
});

// On key press  
cinputName.bind("keyup", function(e){
	validateName(e,  cinputName);
});
cinputEmail.bind("keyup", function(e){
	validateEmail(e,  cinputEmail);
});
cinputAssunto.bind("keyup", function(e){
	validateAssunto(e,  cinputAssunto);
});
cinputMessage.bind("keyup", function(e){
	validateMessage(e,  cinputMessage);
});

});

// Helper functions requierd by the contact form
function validateName(event, input){  
if( input.val().length < 4 || input.val() == "Digite seu nome:" ){
	if(event.type != "keyup") {
		input.addClass("error"); 
	}
	return false;
} else { 
	input.removeClass("error"); 
	return true;
}  
}

function validateEmail(event, input){
var a = input.val();
var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;

if( filter.test(a) ){
	input.removeClass("error"); 
	return true;
}else{
	if(event.type != "keyup") {
		input.addClass("error"); 
	}
	return false;
}
} 

function validateAssunto(event, input){  
if( input.val().length < 4 || input.val() == "Digite o assunto:" ){
	if(event.type != "keyup") {
		input.addClass("error"); 
	}
	return false;
} else { 
	input.removeClass("error"); 
	return true;
}  
}

function validateMessage(event, input){  
if( input.val().length < 10 || input.val() == "Digite sua mensagem:" ){
	if(event.type != "keyup") {
		input.addClass("error"); 
	}
	return false;
}else{
	input.removeClass("error"); 
	return true;
} 
} 

function ajaxSend(form, response,formularios, botao){	
botao.slideUp().animate({X:""} , 200, "linear", function(){
	botao.html('<img src=banners/images/preloader2.gif />').slideDown();		
});

// Make AJAX request 		
$.post('contatos.asp?modo=acao', form.serialize(), function(data){
		formularios.fadeOut();
	response.slideUp().animate({X:""} , 200, "linear", function(){ response.html(data).slideDown(); });
});

//Cancel default action
return false;
};

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi @PhoEniXFirE, o arquivo está codificado em UTF8 também ?

 

dá uma lida aqui:

http://wbruno.com.br/blog/2011/04/19/problemas-acentuacao-ajax-como-resolver/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual arquivo o contato.js ?

 

Ao que estou vendo, tenho q começar a trabalhar com UTF-8 desde qndo crio semtítulo.asp no dreamweaver...

 

Tentei fazer essa correção agora e nao ta funcionando...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual arquivo o contato.js ?

todos.

todos eles.. todos os .asp, todos os .js... todos os .html... enfim, todos.

 

você aplicou o header de UTF8 também ?

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.