Muito bem, direto ao problema:
Qual codificação de caracteres utilizar em seus aplicativos? Qual o Charset ideal?
Se usa algum framework, como Bootstrap e ou jQuery por exemplo, melhor usar UTF-8. Na Academia nosso padrão é UTF-8 sem BOM.
Porém, a maioria dos windows usa o padrão ISO 8859-1, causando os transtornos das imagens abaixo quando alguma de nossas configurações foi esquecida (em especial no Internet Explorer):

Na imagem, a tela da mesma aplicação no Firefox é interpretada corretamente como UTF-8, O mesmo no Chrome, já no I.E…..aparece desconfigurado.
Cabe apontar que a página HTML informa corretamente a codificação:

Porém, nada feito! o I.E. Não reconhece….
E aqui mais uma dica, a declaração de charset deve estar dentre as primeiras no HEAD, na Academia por padrão usamos como a primeira, pois esta declaração deve estar dentre os primeiros 1024 bytes do arquivo, registrando a dica: Evite comentários demasiados no início do HTML, mais pode ser visto em: http://www.w3.org/International/questions/qa-html-encoding-declarations.en
A solução?
Usar um “hack” nos arquivos PHP, no início de cada arquivo PHP que retorna conteúdo utilizamos (também por padrão) a declaração:
header('Content-Type: text/html; charset=UTF-8'); |
header('Content-Type: text/html; charset=UTF-8');
Tal comando não necessária precisa estar no início do arquivo (o fazemos por questões de padronização).
E quanto ao UTF-8 com ou sem BOM?
O BOM, ou Byte Order Mark é um conjunto de caracteres enviados no início de cada arquivo codificado em UTF-8 com BOM. Tal conjunto tem utilidade no UTF-16 ou 32, sendo inútil no 8. Além de inútil ainda traz alguns problemas: com o BOM não é possível utilizar os comandos header do PHP, além de provocar retornos indevidos em aplicações AJAX, como na imagem abaixo (aliás, estes caracteres são o BOM…):

Então, o resumo de como padronizamos cá na Academia, evitando muitos problemas:
- Todos os nossos editores de texto e IDE são configurados para adotar o UTF-8 sem BOM como padrão.
- Todos os arquivos HTML tem a declaração de charset no início do Header, dentro do limite de 1024 bytes;
- Todos os arquivos PHP que retornam algum HTML tem a declaração “header(…” no início do arquivo;
- Os bancos de dados são configurados como collation UTF-8 general_ci (no caso do MySQL).
Isto feito, raramente terá problemas com os malditos charset, principalmente no I.E..
É isso, até a próxima.