Apache
A codificação do servidor não deve ser definida ou definida como UTF-8. Isso é feito através da diretiva AddDefaultCharset do apache. Isso pode ir para o virtualhost ou o arquivo geral (consulte a documentação).
AddDefaultCharset utf-8
MySql
- Defina o agrupamento do banco de dados como UTF-8
- Defina a codificação da conexão. Isso pode ser feito como alguém disse com mysqli_set_charset, ou enviando isso logo após a conexão:
SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'
PHP
1- Você deve definir o charset HTML da página para ser UTF-8, através de uma meta tag na página, ou através de um cabeçalho PHP:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -or- header('Content-type: text/html; charset=utf-8');
2- Você deve sempre usar a versão mb* de funções relacionadas a strings, por exemplo, mbstrlen em vez de strlen para obter o comprimento da string de uma string.
Isso deve permitir que você tenha UTF-8 em todos os lugares, das páginas aos dados. Um teste que você pode fazer:clique com o botão direito do mouse em qualquer lugar da página usando o firefox e selecione Mostrar informações da página. A codificação efetiva está listada nessa página.