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:

Links