A criação de sites, aplicativos ou sistemas de gerenciamento de conteúdo baseados em MySQL frequentemente envolve lidar com problemas desagradáveis relacionados à codificação de caracteres que são difíceis (e, portanto, não divertidos) de diagnosticar. No pior dos casos, o comportamento pode até variar entre o ambiente de desenvolvimento e produção.
Nunca fui fundo o suficiente na codificação de caracteres (já que não é divertido), mas pretendo ler esta postagem de blog promissora recomendada em algum lugar no stackoverflow: Saindo do inferno do conjunto de caracteres do MySQL
Antes de começar a fazer isso (é bastante longa e detalhada), aqui está uma lista rápida de regras a serem seguidas que eu criei depois de muitas tentativas e erros. Posso atualizá-lo depois de ler o artigo.
A lista de verificação
- O agrupamento do banco de dados deve ser definido como
utf8_general_ci
(ou qualquer coisa mais específica do idiomautf8_language_ci
) - Cada coluna em cada tabela deve ter o mesmo agrupamento
- A conexão com o banco de dados incluído em cada página PHP deve ser seguida por esta consulta MySQL:
SET NAMES 'utf8' COLLATE 'utf8_general_ci'
- O PHP deve fornecer um cabeçalho HTTP antes de qualquer saída, que especifica a codificação:
header('Content-type: text/html; charset=utf-8');
- O cabeçalho HTML deve especificar a codificação:
<meta charset="UTF-8">
- Cada arquivo PHP que exibe a saída deve ser salvo com a codificação de caracteres definida como UTF-8 sem BOM
Há um caso especial que precisa ser mantido em mente:
- Sempre que cancelar a
htmlentities()
função do PHP , você deve especificar a codificação UTF-8
A fonte
Caso alguém esteja se perguntando, a questão stackoverflow que me trouxe ao post do blog está aqui , e a usuária Adrienne , autora da melhor resposta, lista estas regras:
- A conexão DB está usando UTF-8
- As tabelas do banco de dados estão usando UTF-8
- As colunas individuais nas tabelas de banco de dados estão usando UTF-8
- Na verdade, os dados são armazenados de forma adequada na codificação UTF-8 dentro do banco de dados (muitas vezes não é o caso se você importou de fontes incorretas ou alterou agrupamentos de tabelas ou colunas)
- A página da web está solicitando UTF-8
- Apache está servindo UTF-8