Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
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.
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)
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.
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.
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.
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;
}
}Estou tendo esse mesmo problema de não aparecer acentuação apenas no Internet Explorer, você conseguiu alguma solução? pode compartilhar?
Obrigado!
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.
>
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?