Ir para conteúdo

POWERED BY:

Arquivado

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

GuttoSP

Problemas com acentuação Ajax + Internet Explorer (novidade...)

Recommended Posts

Bom dia galera. Já a algum tempo que não dou o ar da graça, mas aqui estou.

 

Carrego o conteúdo de uma página via ajax, utilizando o $.load(). Os caracteres especiais NÃO eram exibidos corretamente, mas acrescentei o código abaixo, e funciona bem em qualquer navegador, menos no IE.

$.ajaxSetup({
		'beforeSend' : function(xhr) {
		     xhr.overrideMimeType("text/plain; charset=iso-8859-1");
		},
		dataType: "html"
});

 

Não tenho permissão para alterar o encoding das páginas que são requisitadas, então a solução teria que ser via javascript, pois mesmo com utf-8, iso-8859-1 ou qualquer outro encoding na página que faz a requisição, os caracteres não são exibidos corretamente no IE.

 

O script completo é simples, segue abaixo:

  $.ajaxSetup({
		'beforeSend' : function(xhr) {
		     xhr.overrideMimeType("text/plain; charset=iso-8859-1");
		},
		dataType: "html"
});

$(document).ready(function() {
	$( '#2Container' ).load( 'http://1.1.1.1/pagina.php' );  	
});

 

Pesquisei, testei ajax sem jquery, mas ainda assim o erro permanece. A versão que utilizo é a jquery-1.7.2

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tenho permissão para alterar o encoding das páginas que são requisitadas,

e se você alterar o enconding da página que requisita?

Compartilhar este post


Link para o post
Compartilhar em outros sites

e se você alterar o enconding da página que requisita?

 

Bom dia Bruno. Como descrevi, já testei vários encodings, tanto na página que requisita quanto do ajaxSetup, mas não funciona no IE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acompanhe pelo Firebug, para entender oque você está recebendo:

http://wbruno.com.br/2011/04/14/como-debugar-ajax-firebug/

 

Se a página que requisitou tiver o mesmo encoding das requisitadas, convém lembrar que o ajax do jQuery trabalha com utf8 por padrão.

Isso deveria bastar. Não pode ter sido um cache durante os teus testes no IE, ou configuração do browser, que te impediram de testar corretamente??

 

Tecnicamente, se funciona em um browser, tem que funcionar no outro. A menos que este outro esteja configurado "incorretamente".(fora do padrão)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno, valeu por tentar, mas ainda não resolveu. Testei em mais de uma máquina, então dificilmente seria cache. A página requisitada, assim como a que requisita, estão com

 

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

 

Se não utilizar o ajaxSetup, não funciona em nenhum navegador. Com ajaxSetup, só NÃO funciona no IE, Chrome e FireFox estão ok.

 

Ví em muitos fóruns dúvidas relacionadas, mas nenhuma solução até agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, na página requisitada tem uma meta de ISO.

O arquivo está em ISO ? Verifique isso, e peça para corrigirem caso estiver errado.

 

Uma possível solução que eu pensei, seria colocar um proxy no meio dessa requisição.

O teu script requisitaria um outro script php, e este sim requisitaria a página final.

 

O teu script php, seria responsável por "corrigir" o arquivo final.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como é um template para um sistema de terceiros, dificilmente conseguiria que alterassem algo no próprio sistema. Vou continuar pesquisando alguma solução, e caso não encontre, farei o meio de campo com php.

 

Valeu por colaborar. Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa função pode te ajudar

 

/**
*
*  UTF-8 data encode / decode
*  http://www.webtoolkit.info/
*
**/

var Utf8 = {

// public method for url encoding
encode : function (string) {
	string = string.replace(/\r\n/g,"\n");
	var utftext = "";

	for (var n = 0; n < string.length; n++) {

		var c = string.charCodeAt(n);

		if (c < 128) {
			utftext += String.fromCharCode(c);
		}
		else if((c > 127) && (c < 2048)) {
			utftext += String.fromCharCode((c >> 6) | 192);
			utftext += String.fromCharCode((c & 63) | 128);
		}
		else {
			utftext += String.fromCharCode((c >> 12) | 224);
			utftext += String.fromCharCode(((c >> 6) & 63) | 128);
			utftext += String.fromCharCode((c & 63) | 128);
		}

	}

	return utftext;
},

// public method for url decoding
decode : function (utftext) {
	var string = "";
	var i = 0;
	var c = c1 = c2 = 0;

	while ( i < utftext.length ) {

		c = utftext.charCodeAt(i);

		if (c < 128) {
			string += String.fromCharCode(c);
			i++;
		}
		else if((c > 191) && (c < 224)) {
			c2 = utftext.charCodeAt(i+1);
			string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
			i += 2;
		}
		else {
			c2 = utftext.charCodeAt(i+1);
			c3 = utftext.charCodeAt(i+2);
			string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
			i += 3;
		}

	}

	return string;
}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tendo esse mesmo problema de não aparecer acentuação apenas no Internet Explorer, você conseguiu alguma solução? pode compartilhar?

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal, eu também estava com problemas de acentuação em todos os browsers e também no android e IOS, encontri o código abaixo, porém ele só estava funcionando com submit.

 

$.ajaxSetup({
'beforeSend' : function(xhr) {
try{
xhr.overrideMimeType('text/html; charset=iso-8859-1');
}
catch(e){
}
}});

 

Fazendo testes e por acaso encontrei a solução, acrescentei uma chamada e em todos os browsers e nos mobiles a acentuação funcionou corretamente. Segue a alteração do código acima:

 

$.ajaxSetup({
'beforeSend' : function(xhr) {
try{
xhr.mimeType();

xhr.overrideMimeType('text/html; charset=iso-8859-1');
}
catch(e){
}
}});

 

 

Realmente não sei dizer porque dessa maneira funcionou, foi apenas um golpe de sorte, espero ter ajudado em algo.

 

Att.

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.