Revision 254247 of Acentuação para conteúdos carregados por AJAX

  • Slug da revisão: Acentuação_para_conteúdos_carregados_por_AJAX
  • Título da revisão: Acentuação para conteúdos carregados por AJAX
  • ID da revisão: 254247
  • Criado:
  • Autor: Pfsergio1968
  • É revisão atual? Não
  • Comentário /* O código */

Conteúdo da revisão

Explicações Iniciais

Este artigo trata dos problemas de acentuação na recuperação de um conteúdo via AJAX e NÃO do envio via métodos GET ou POST.


O XMLHttpRequest, o motor por trás do AJAX, trabalha no padrão UTF-8 por default, tanto pra enviar dados quanto pra receber. Isso vem do próprio browser mesmo. Nos primórdios da internet, o Tim Berners-Lee ainda não estava tão preocupado com a internacionalização do HTML. Este esforço só começou a acontecer em novembro de 1995, depois da formação da W3C, onde visavam extender as capacidades do HTML 2.

Por este motivo o Ajax costuma apresentar vários problemas com nossos caracteres em português.

Para tentar resolver este problema, inventaram muitas complicações usando funções JavaScript e funções como encode, escape, etc nos scripts do lado do servidor (ASP, PHP, JSP, etc). Uma complicação só!!!

A forma correta de renderizar nosso português é simplesmente usando o charset ISO-8859-1 e não o UTF-8, simples assim. Você deve enviar cabeçalhos do servidor para o navegador, informando que você usará ISO-8859-1. Como fazer isso?

  • configurar seu servidor pra servir ISO-8859-1 por padrão, se você tiver acesso a isto (adicionando uma linha no arquivo httpd.conf para servidores Apache) OU
  • indicar o charset correto no início do seu script server side, com apenas 1 (uma) linha de código passadas abaixo.

O código

  • Em ASP:
<% Response.Charset="ISO-8859-1" %>
  • Em PHP:
<?php header("Content-Type: text/html;  charset=ISO-8859-1",true); ?>
  • Em JSP:
<%@ page contentType="text/html; charset=ISO-8859-1" %>
  • (Se voce conhece como alterar para outras linguagens server-side, edite este artigo e conte-nos :) )

Lembrando que os códigos devem ser colocados no início de seu script (pra quem tem pouca experiência com a linguagem server side). Testado com sucesso no IE6 e FF1.5.

Você também pode tentar usar só a tag META em arquivos HTML simples, mas não é confiável.

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

Caso você saiba a forma correta de editar a tag META para que os caracteres do português funcionem corretemente, edite este post e informe-nos.

Observações finais:

Gostaria de lembrar que esta solução funciona apenas para a recuperação da página no servidor e não para o envio de dados via AJAX! Uma ótima solução encontrada na internet para o envio dos dados pode ser encontrada em .

Há também outra possível causa para problemas de caracteres: o seu banco de dados. Alguns BD's, guardam seus dados apenas em UTF-8, e aí ocorre a perda de caracteres. Verifique isso também caso os códigos acima não tenham dado certo.

Fonte da revisão

<h3 name="Explica.C3.A7.C3.B5es_Iniciais">Explicações Iniciais</h3>
<p><em>Este artigo trata dos problemas de acentuação na <b>recuperação de um conteúdo via AJAX</b> e NÃO do envio via métodos GET ou POST.</em>
</p><p><br>
</p><p>O XMLHttpRequest, o motor por trás do AJAX, trabalha no padrão UTF-8 por default, tanto pra enviar dados quanto pra receber. Isso vem do próprio browser mesmo. Nos primórdios da internet, o <a class="external" href="http://en.wikipedia.org/wiki/Tim_Berners-Lee">Tim Berners-Lee</a> ainda não estava tão preocupado com a internacionalização do HTML. Este esforço só começou a acontecer em novembro de 1995, depois da formação da <a class="external" href="http://www.w3c.org">W3C</a>, onde visavam extender as capacidades do HTML 2.
</p><p>Por este motivo o Ajax costuma apresentar vários problemas com nossos caracteres em português.
</p><p>Para tentar resolver este problema, inventaram muitas complicações usando funções <a href="pt/JavaScript"> JavaScript</a> e funções como encode, escape, etc nos scripts do lado do servidor (ASP, PHP, JSP, etc). Uma complicação só!!!
</p><p>A forma correta de renderizar nosso português é simplesmente usando o charset ISO-8859-1 e não o UTF-8, simples assim. Você deve enviar cabeçalhos do servidor para o navegador, informando que você usará ISO-8859-1. Como fazer isso?
</p>
<ul><li><b>configurar seu servidor pra servir ISO-8859-1 por padrão</b>, se você tiver acesso a isto (adicionando uma linha no arquivo httpd.conf para servidores Apache) OU
</li><li><b>indicar o charset correto no início do seu script server side</b>, com apenas 1 (uma) linha de código passadas abaixo.
</li></ul>
<h3 name="O_c.C3.B3digo">O código</h3>
<ul><li>Em ASP:
</li></ul>
<pre class="eval">&lt;% Response.Charset="ISO-8859-1" %&gt;
</pre>
<ul><li>Em PHP:
</li></ul>
<pre class="eval">&lt;?php header("Content-Type: text/html;  charset=ISO-8859-1",true); ?&gt;
</pre>
<ul><li>Em JSP:
</li></ul>
<pre class="eval">&lt;%@ page contentType="text/html; charset=ISO-8859-1" %&gt;
</pre>
<ul><li>(Se voce conhece como alterar para outras linguagens server-side, edite este artigo e conte-nos :) )
</li></ul>
<p>Lembrando que os códigos devem ser colocados no início de seu script (pra quem tem pouca experiência com a linguagem server side).
Testado com sucesso no IE6 e FF1.5.
</p><p>Você também pode tentar <b>usar só a tag META em arquivos HTML simples</b>, mas não é confiável. 
</p>
<pre class="eval">&lt;META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
</pre>
<p>Caso você saiba a forma correta de editar a tag META para que os caracteres do português funcionem corretemente, edite este post e informe-nos.
</p>
<h3 name="Observa.C3.A7.C3.B5es_finais:">Observações finais:</h3>
<p>Gostaria de lembrar que esta solução funciona apenas para a <b>recuperação</b> da página no servidor e <b>não para o envio de dados</b> via AJAX! Uma ótima solução encontrada na internet para o envio dos dados pode ser encontrada em <a class="external" href="http://phpbrasil.com/articles/article.php/id/1182">.
</a></p><p><a class="external" href="http://phpbrasil.com/articles/article.php/id/1182">Há também outra possível causa para problemas de caracteres: o seu banco de dados. Alguns BD's, guardam seus dados apenas em UTF-8, e aí ocorre a perda de caracteres. Verifique isso também caso os códigos acima não tenham dado certo.
</a></p><a class="external" href="http://phpbrasil.com/articles/article.php/id/1182">
</a><div class="originaldocinfo"><a class="external" href="http://phpbrasil.com/articles/article.php/id/1182">
<h3 name="Informa.C3.A7.C3.B5es_Sobre_o_Documento_Original"> Informações Sobre o Documento Original </h3>
</a><ul><a class="external" href="http://phpbrasil.com/articles/article.php/id/1182"></a><li><a class="external" href="http://phpbrasil.com/articles/article.php/id/1182"> Documento original: </a><a class="external" href="http://elmicox.blogspot.com/2006/06/ajax-acentuao-soluo-final-1-linha-de.html">Ajax - Acentuação, a solução final - 1 linha de código</a>
</li><li> Autor: <a href="User:Micox">Micox</a>
</li><li> Informações sobre Copyright: Livre
</li></ul>
</div>
Reverter para esta revisão