Acentuação para conteúdos carregados por AJAX

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. Para o tratamento de problemas no ENVIO, veja esta solução (no sub-capítulo "Recebendo os dados (no PHP)".

O XMLHttpRequest, o motor por trás do AJAX, trabalha no padrão UTF-8 por default, tanto para enviar dados quanto pra receber. Isso vem do próprio browser. 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.

Atualmente, os navegadores que implementam Ajax também costumam apresentar vários problemas com nossos caracteres em português, ou outras línguas que possuam acentuação.

Para resolver este problema, o melhor método seria o uso de HTML Entities, porém nem sempre é possível. De forma a contornar isto, vemos pela internet 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 recomendada, além do HTML entities, para corrigir o problema da acentuação no Ajax é através da definição correta do charset.

Para renderizar nosso português você pode usar o charset ISO-8859-1. Tente padronizar o ISO-8859-1 em todas as partes ligadas ao seu sistema: charset do banco de dados (caso haja algum envolvido), meta charset da página HTML, e o mais importante:

Você deve enviar cabeçalhos do servidor para o navegador, informando que você usará ISO-8859-1.

Como fazer isto?

  • 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 ColdFusion:
<cfcontent type="text/html; charset=ISO-8859-1">
  • 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 ou .

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.

Etiquetas do documento e colaboradores

Última atualização por: Leandro Mercês Xavier,