Assine os Feeds


Experimento AJAX #6: Acentuação

setembro 29th, 2007

A solução que apresento tem como pressuposto uma página ou um site em que o charset é o ISO-8859-1, a linguagem de programação o PHP e o banco de dados o MySQL. Penso, que essa solução, pode facilmente ser adaptada para outras situações.

O assunto já foi objeto de posts no El Micox, no JulioGreef Blog e no fóruns iMaster, pelo menos.

O experimento é apresentado tomando-se como base um exemplo em que considera os métodos GET e POST do objeto XMLHttpRequest e os charset’s UTF-8 e ISO-8859-1 como formatos de gravação no banco de dados. E, claro, de acordo com a combinação entre método e charset é realizada a exibição correta dos caracteres acentuados no padrão da página ou site, no caso o ISO-8859-1.

A primeira medida é colocar no início das rotinas PHP o código a seguir para informar ao AJAX que os textos - label’s dos formulários, mensagens de erro e dados -, estão no formato ISO-8859-1.

<?php header("Content-Type: text/html;  charset=ISO-8859-1",true) ?>

Mesmo com esse código, é interessante observar o comportamento dos browsers frente aos métodos GET e POST do objeto XMLHttpRequest:

  • No IE6, IE7, Netscape 8.0 e Firefox 2.0.0.7 os dados chegam nas rotinas chamadas, quando se usa o método GET, no formato ISO-8859-1 e no formato UTF-8 quando é utilizado o método POST;
  • Já no Opera 9.0 em ambos os casos os dados chegam no formato UTF-8.

O comportamento em outros browsers, como por exemplo, o Safari, não tenho como estabelecer nessa situação. Quem sabe alguém aí pode ajudar.

Isso posto, o próximo passo é tratar os campos com informações textuais para gravá-los no banco de dados no formato desejado.

O papel é cumprido pelas instruções a seguir, de fácil interpretação, espero, e que leva em consideração as observações acima colocadas:

 if ($charset == "ISO-8859-1" && $metodo == "POST") {

    $titulo = utf8_decode($titulo);       // Converte os dados para ISO-8859-1

    $noticia = utf8_decode($noticia);

 }

 if ($charset == "UTF-8" && $metodo == "GET") {

    if ($browser != "Opera") {

       $titulo = utf8_encode($titulo);    // Converte para UTF-8

       $noticia = utf8_encode($noticia);

    }

 }

 if ($browser == "Opera" && $charset == "ISO-8859-1" && $metodo == "GET") {

    $titulo = utf8_decode($titulo);

    $noticia = utf8_decode($noticia);

 } 

Gravação efetuada, resta agora tratar os dados para que sejam exibidos no padrão ISO-8859-1:

   if ($rsnoticia->charset == "ISO-8859-1") {

      $ch_titulo = $rsnoticia->titulo;

      $ch_noticia = $rsnoticia->noticia;

   } else {

      $ch_noticia = utf8_decode($rsnoticia->noticia);

      $ch_titulo = utf8_decode($rsnoticia->titulo);

   }

Faça o download do experimento para analisar e testar e qualquer dúvida ou problema entre em contato.

Categorias: AJAX, Javascript, PHP, Técnico

Imprima este artigo Envie este artigo para um(a) amigo(a) Adicionar ao del.icio.us Adicionar ao Linkk 3,407 Views



1 Comentário Adicione o seu

  • 1. Micox  |  outubro 1st, 2007 at 09:25:53

    Finalmente uma analise completa e perfeita.
    Linkando…

Deixe seu Comentário

Obrigatório

Obrigatório, (não publicado)

São permitidas as seguintes tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed