Os problemas de codificação de caracteres (charset) são muito comuns e nos tempos de hoje ainda se vê muitas páginas com este tipo de problemas.
Em teoria para solucionar este tipo de problemas é bastante fácil Se trabalhamos com UTF-8, então todos os ficheiros e comunicações devem de se realizar com este tipo de codificação de caracteres.
No entanto, na prática isto é bem mais difícil de implementar e se perde muitas vezes horas tentando buscar boas soluções.
Apesar de ser um tema complexo, tentarei explicar da maneira mais simples algumas soluções que a mim me parecem interessantes e as melhores para solucionar este tipo de problemas.
No entanto, caso tenham dúvidas sobre alguma explicação ou queiram aportar as vossas soluções/ideias, podem sempre usar os comentários.
Tinha referido que todos os ficheiros e comunicações devem de se realizar com este tipo de codificação de caracteres, portanto, implica que quando pedimos dados ao servidor Apache, PHP ou MySQL estes enviem a respectiva informação no mesmo formato.
Sendo assim vou dividir este post em varias partes e abordar por separado cada secção.
Por regra, trabalho sempre com o formato mais abrangente e universal de caracteres, portanto utilizo UTF-8 como codificação de caracteres nos meus projectos.
Vamos passar da teoria à prática e vamos com um exemplo simples. Uma página estática em formato UTF-8 sobre servidor Apache.
Abrimos Notepad e escrebemos os seguinte codigo html:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt" lang="pt">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Charset</title>
</head>
<body>
<div>Exemplo simples de codificação de caracteres (charset)</div>
<div>á é í ó ú à è ì ò ù ä ë ï ö ü ¡ ¿ ñ</div>
</body>
</html>
Gravámos o documento como charset.htm sem mudar a opção “Codificação:” que devia estar como ANSI.
Subimos ao servidor e testamos ou se querem como é html simples podem executar directamente no vosso navegador preferido (Firefox).
Resultado:

Como podem ver, saí uns caracteres muito esquisitos porque temos o ficheiro em formato ANSI, mas estamos a dizer ao navegador que os caracteres que temos no código deviam ser UTF-8. Portanto o navegador vai ler os caracteres ANSI como se fossem UTF-8 gerando estes caracteres esquisitos.
Editamos o respectivo ficheiro em Notepad e seleccionamos “Gravar como…”. Mantemos o mesmo nome de ficheiro e em “Codificação:” alteramos para “UTF-8″.
Subimos novamente ao servidor e testamos ou se querem como é html simples podem executar directamente no vosso navegador preferido (Firefox).
Resultado:

Agora os caracteres saíram como queríamos, porque estamos a dizer ao navegador que os caracteres que temos no código são UTF-8 e como o respectivo ficheiro já esta guardado com esta codificação, então não existe problemas de interpretação.
Se usamos os formatos ISO-8859-1 ou ISO-8859-15 (outros formatos para português), o nosso ficheiro deveria de estar em ANSI e deveríamos usar uma destas meta tags no nosso código html:
<meta http-equiv="content-type" content="text/html; charset=iso-8859-15" />
Se estamos sobre servidor Apache isto só é assim caso a codificação de caracteres em Apache esteja em modo automático.
Apache tem uma directiva chamada AddDefaultCharset que indica qual é a codificação de caracteres que os ficheiros devem usar e alguns dos servidores a definem como:
AddDefaultCharset UTF-8
Isto significa que todos os ficheiros devem estar no formato UTF-8.
Neste caso se usa os formatos ISO-8859-1 ou ISO-8859-15 o nosso ficheiro deveria de estar em UTF-8 e não em ANSI (exemplo anterior) porque o servidor Apache só vai ler correctamente ficheiros com o formato UTF-8. No entanto, as meta tags não sofriam alterações:
<meta http-equiv="content-type" content="text/html; charset=iso-8859-15" />
O recomendável é que esta directiva esteja desactivada para funcionar em modo automático. Isto é, detectar automaticamente a codificação de caracteres do ficheiro.
AddDefaultCharset Off
Esta directiva pode ser modificada através do ficheiro de configuração do servidor Apache (httpd.conf) ou através do ficheiro individual de configuração (.htaccess).
NOTA: Devemos reiniciar o servidor Apache quando se modifique algumas das directivas do ficheiro de configuração (httpd.conf).
Na próxima secção falaremos da codificação de caracteres sobre PHP.
[...] Solucionar los problemas de codificación de caracteres en Apache, PHP y MySQL http://www.setpointer.com/blog/apache/solucionar-os-problemas-de-co… por Pardalito hace 2 segundos [...]