Jump to content
PRSousa

HttpRequest e caracteres especiais

Recommended Posts

PRSousa

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

Share this post


Link to post
Share on other sites
scorch

Podes mostrar o código que obtens através da responseText?


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
jwv

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';
?>


Jonathan Vicente // WEB DEVELOPERPORTOFOLIO www.jonathanvicente.comCO-FOUNDER www.mmstudio.com.pt

Share this post


Link to post
Share on other sites
PRSousa

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

Share this post


Link to post
Share on other sites
scorch

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>


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
PRSousa

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

Mais alguma ideia que eu possa tentar?

Obrigado mais uma vez.

Share this post


Link to post
Share on other sites
jwv

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


Jonathan Vicente // WEB DEVELOPERPORTOFOLIO www.jonathanvicente.comCO-FOUNDER www.mmstudio.com.pt

Share this post


Link to post
Share on other sites
PRSousa

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).

Share this post


Link to post
Share on other sites
jwv

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.


Jonathan Vicente // WEB DEVELOPERPORTOFOLIO www.jonathanvicente.comCO-FOUNDER www.mmstudio.com.pt

Share this post


Link to post
Share on other sites
PRSousa

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.

Share this post


Link to post
Share on other sites
jwv

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.


Jonathan Vicente // WEB DEVELOPERPORTOFOLIO www.jonathanvicente.comCO-FOUNDER www.mmstudio.com.pt

Share this post


Link to post
Share on other sites
PRSousa

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

Share this post


Link to post
Share on other sites
jwv

Estranho... deveria funcionar.

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


Jonathan Vicente // WEB DEVELOPERPORTOFOLIO www.jonathanvicente.comCO-FOUNDER www.mmstudio.com.pt

Share this post


Link to post
Share on other sites
PRSousa

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.