1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
---
title: Acentuação para conteúdos carregados por AJAX
slug: Acentuação_para_conteúdos_carregados_por_AJAX
tags:
- AJAX
- 'AJAX:Artigos'
- Artigos
- Todas_as_Categorias
---
<h3 id="Explica.C3.A7.C3.B5es_Iniciais" 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. Para o tratamento de problemas no ENVIO, veja <a class="external" href="http://www.juliogreff.blog.br/utilizando-o-metodo-post/">esta solução (no sub-capítulo "Recebendo os dados (no PHP)"</a>.</em>
</p><p>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 <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>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.
</p><p>Para resolver este problema, o melhor método seria o uso de <a class="external" href="http://www.w3schools.com/tags/ref_entities.asp">HTML Entities</a>, porém nem sempre é possível.
De forma a contornar isto, vemos pela internet 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 recomendada, além do HTML entities, para corrigir o problema da acentuação no Ajax é através da <b>definição correta do <a class="external" href="http://www.w3.org/International/O-charset.pt-br.html">charset</a></b>.
</p><p>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:
</p><p><b>Você deve enviar cabeçalhos do servidor para o navegador, informando que você usará ISO-8859-1.</b>
</p><p>Como fazer isto?
</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 id="O_c.C3.B3digo" name="O_c.C3.B3digo">O código</h3>
<ul><li>Em ColdFusion:
</li></ul>
<pre class="eval"><cfcontent type="text/html; charset=ISO-8859-1">
</pre>
<ul><li>Em ASP:
</li></ul>
<pre class="eval"><% Response.Charset="ISO-8859-1" %>
</pre>
<ul><li>Em PHP:
</li></ul>
<pre class="eval"><?php header("Content-Type: text/html; charset=ISO-8859-1",true); ?>
</pre>
<ul><li>Em JSP:
</li></ul>
<pre class="eval"><%@ page contentType="text/html; charset=ISO-8859-1" %>
</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"><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</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 id="Observa.C3.A7.C3.B5es_finais:" 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://www.juliogreff.blog.br/utilizando-o-metodo-post/"> ou </a><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 id="Informa.C3.A7.C3.B5es_Sobre_o_Documento_Original" 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>Micox</a>
</li><li> Informações sobre Copyright: Livre
</li></ul>
</div>
|