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
Plugin sidebarTabs (demo)
Posts por Categoria[-]
Posts Recentes[-]
- Curiosidade Matemática #9 - Números com Três Algarismos
- Plugin sidebarTabs para WP
- O tema Viche Minc
- Notícias Expressas #10 - Plugin Questionarius para WP
- Downloads
- Downloads
- Notas
- Informativo: Google Docs - Você está com este problema?
- Ext JS - Experimento
- Viche Responde #2 - Questão de Progressão Aritmética
Livros[-]
Visitantes[-]
- 19 currently online
- 35 maximum concurrent
- 1610437 total visitors



















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