Agora que já funciona correctamente a codificação de caracteres das páginas estáticas (ler “Parte I – Apache“), vamos às páginas dinâmicas PHP.
PHP tem o seu próprio método de codificação de caracteres que vem configurado por definição como ISO-8859-1. Mesmo usando um ficheiro/script em UTF-8 com a meta tag definida para UTF-8, vai sair caracteres esquisitos.
Vamos à prática. Abrimos Notepad e escrevemos o seguinte código 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.php e alteremos a opção “Codificação:” para UTF-8.
Subimos este ficheiro ao servidor e testamos (Requisitos: Apache + PHP).
Resultado:

Se a extensão deste ficheiro fosse “.htm”, não havia problemas de codificação de caracteres porque se tratava de uma página estática.
Mas como a extensão deste ficheiro é “.php” então se trata de uma página dinâmica PHP. Isto quer dizer que todo código HTML desta página é gerado pelo intérprete de PHP e não pelo servidor Apache.
Como o intérprete de PHP vem configurado por defeito como ISO-8859-1, este vai ler o ficheiro (em UTF-8) com uma codificação de caracteres errada gerando caracteres esquisitos.
(mais…)