• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

PRSousa

HttpRequest e caracteres especiais

14 mensagens neste tópico

Quando faço HttpRequest de uma página, e pego no HTML da mesma (em .responseText) e coloco num <div> (.innerHtml, os caracteres portugueses vêm todos baralhados.

Se colocar a mesma página numa <iframe>, por exemplo, fica tudo direitinho.

Alguém me pode ajudar?

TIA

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso acontece por causa do encoding do response ou do encoding que está definido no HTML.

Tens de definir o header com o enconding correcto.

Qual é a linguagem que utilizas do lado do servidor (PHP,ASP,RUBY,PHYTON)?

Tens o encoding no HTML definido para iso-8859-1.

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

Na resposta tens de enviar o header com o encoding iso-8859-1.

Exemplo em PHP:

<?php
header('Content-Type: text/html; charset=iso-8859-1');
echo 'Olá mundo do PHP';
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado desde já pelas respostas, e passo então a enviar os pedaços de código:

A minha página contém:

...
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
  <script language="JavaScript" type="text/javascript">
  function GetHTML()
    {
    var url = "http://www.exemplo.pt/default.html";
    if (window.XMLHttpRequest)
      {
      xhttp = new XMLHttpRequest();
      }
    else
      {
      xhttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
    xhttp.open( "GET", url , false );
    xhttp.setRequestHeader( "Content-Type", "text/html; charset=windows-1252" );
    xhttp.send(null);
    document.getElementById("OtherPageHTML").innerHTML = xhttp.responseText;
    xhttp = null;
    }
...
   <iframe id="iframe" src="http://www.exemplo.pt/default.html"></iframe>
   <input type="submit" onclick="GetHTML()" value="Get Page" />
   <div id="OtherPageHTML"></div>
...

Na <iFrame> aparece tudo direitinho mas na <div> aparece tudo estropiado.

Analizando a página pretendida (http://www.exemplo.pt/default.html) verifica-se que tem:

...
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
...

Podem ajudar-me p. f.

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta antes assim:

<meta http-equiv="Content-Type" content="text/html; charset=charset=iso-8859-1">
  <script language="JavaScript" type="text/javascript">
  function GetHTML()
    {
    var url = "http://www.exemplo.pt/default.html";
    if (window.XMLHttpRequest)
      {
      xhttp = new XMLHttpRequest();
      }
    else
      {
      xhttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
    xhttp.open( "GET", url , false );
    xhttp.setRequestHeader( "Content-Type", "text/html; charset=iso-8859-1" );
    xhttp.send(null);
    document.getElementById("OtherPageHTML").innerHTML = xhttp.responseText;
    xhttp = null;
    }
...
   <iframe id="iframe" src="http://www.exemplo.pt/default.html"></iframe>
   <input type="submit" onclick="GetHTML()" value="Get Page" />
   <div id="OtherPageHTML"></div>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso foi o que eu comecei por experimentar mas sem sucesso  :D .

Mais alguma ideia que eu possa tentar?

Obrigado mais uma vez.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O conteúdo que estás a ir buscar é dinâmico(PHP,etc...) ou estático(HTML)?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dinâmico.

A página que vou buscar não é "minha". Trata-se de uma página externa onde preciso de ir colher alguns dados. Não uso a <iframe> porque na minha página não consigo aceder ao conteúdo da <iframe> (diferentes domínios).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes fornecer o URL onde estás a ir buscar o conteúdo?

Provavelmente terás de fazer um script do lado do servidor para fazeres o encoding do conteúdo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como já disse, a página não é minha mas está num domínio a que tenho acesso. Não vale a pena fornecer o URL pois não consegues ver.

Tenho de usar a página tal qual ela está, ou seja, não posso fazer nada ao nível do servidor.

Vês alguma alternativa?

Há alguma forma de usar a <iframe>, uma vez que neste container o HTML está direitinho?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens duas formas de resolver o problema do enconding.

Primeira:

- Identificar o encoding da página pedida (podes fazer isso utilizando o firebug na aba NET e depois abres o link da página na aba HEADERS).

- Colocar o teu HTML com o mesmo encoding da página pedida.

Segunda:

- Buscar o conteúdo em PHP (por exemplo: file_get_contents) e converter o conteúdo para o encoding correcto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois isso já eu tentei, por isso estou perdido.

Primeira:

O enconding da págima pretendida é:

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

que é exactamente o que eu coloquei na minha página:

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

e que coloquei também no XHR:

xhttp.setRequestHeader( "Content-Type", "text/html; charset=windows-1252" );

Não funciona :-(

Segunda:

PHP não uso. Há alguma alternativa em JavaScript que permite fazer esta extracção convertendo para o encoding correcto?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estranho... deveria funcionar.

Não tenho conhecimento que seja possível modificar o encoding do conteúdo em javascript.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E com <iframe>? É possível contornar as questões de segurança pelo facto de serem 2 domínios diferentes?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora