Como resolver problemas de acentuações em seu site
De Wiki HOST4
O que fazer quando meu site exibe caracteres distorcidos ao invés de caracteres acentuados, por exemplo:
Ao invés de Canção, ele exibe Can��o ou Canção.
No primeiro caso (Can��o), sua página em ISO-8859-1 está obtendo a palavra Canção armazenada em UTF-8 da origem, seja ela do banco de dados ou de um XML, txt etc.
Já o segundo caso (Canção) é a sua página em UTF-8 exibindo a palavra Canção armazenada em ISO-8859-1 da origem.
Para que ocorra a exibição correta, deve-se armazenar novamente os dados com a codificação correta (o que é muito trabalhoso dependendo da quantidade de dados) ou trocar a codificação de exibição de seu site.
Para trocar a exibição, o cabeçalho HTML deverá estar como:
Para ISO-8859-1:
<html> <head> <title>Minha pagina</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
Para UTF-8:
<html> <head> <title>Minha pagina</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Observação sobre a forma de salvar o arquivo: Mesmo que você especifique um dos cabeçalho acima ou com o charset que deseja, o arquivo deve ser salvo na codificação equivalente ao charset especificado.Por exemplo, se você utiliza <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> , o arquivo deve ser salvo na codificação "ISO-8859-1, ou Latin1, ou Europeu Ocidental ISO (ou mesmo ANSI caso você use o Bloco de Notas do Windows)", mas se o charset for UTF-8, a codificação deverá ser Unicode / UTF-8 também.Lembrando que essa opção está disponível no editor de textos utilizado para editar o arquivo (notepad, notepad ++, textpad, vi, vim, etc.).
Observação sobre o banco de dados: Não é sempre collations da base o culpado. No caso do MySQL, não haverá nenhum problema de exibição, mas sim, na hora da busca ele pode não saber o que é o caractere acentuado. O SQL Server já é mais passível de exibir erros conforme o collation especificado.
Observação crítica: Mesmo que você especifique um dos cabeçalho acima ou com o charset que deseja, o usuário pode forçar um outro encoding clicando no menu Exibir > Codificação > (encoding que ele quiser) do navegador dele, neste caso, o navegador enviará os dados da forma como o usuário determinou. Uma das maneiras de se prevenir contra este tipo de ação é criar uma função que determine quais são os caracteres permitidos e substitua os demais por espaço, nulo, sublinhado, asterisco ou outro de sua preferência.
Sugestão de caracteres permitidos:
0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
ÁÉÍÓÚ áéíóú ÂÊÔ âêô Àà Üü Çç Ññ ÃÕ ãõ
"'!@#$%&*()_-+={[}]|\<,>.:;?/ (lembrando que o espaço é um caractere também)
Importante: A criação da função é de responsabilidade do desenvolvedor e variará conforme a linguagem de programação utilizada no site.
Existe um artigo bem completo escrito por Joel Spolsky que explica os conjuntos de caracteres e os problemas de acentuação que eles podem causar:
- The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) (Versão original, em inglês)
- O Mínimo Absoluto Que Todo Desenvolvedor de Software Absolutamente, Positivamente Precisa Saber Sobre Unicode e Conjuntos de Caracteres (Sem Desculpas!) (Versão traduzida para o português)
