Textos como João, ? ou interrogações no lugar de acentos indicam que bytes foram gravados ou interpretados com codificações diferentes. A correção exige identificar onde ocorreu a conversão: arquivo, cabeçalho HTTP, conexão PHP, tabela, coluna, importação ou navegador.
Use UTF-8 de ponta a ponta
- arquivos de código e conteúdo salvos em UTF-8;
- HTML com
<meta charset="utf-8">no início do<head>; - resposta HTTP com
Content-Type: text/html; charset=UTF-8; - conexão do banco configurada para
utf8mb4; - tabelas/colunas com charset e collation compatíveis.
Diagnóstico
- Abra as ferramentas do navegador e confira o cabeçalho
Content-Type. - Veja o arquivo em um editor que mostra a codificação real.
- Consulte no banco a coluna problemática e compare o valor bruto.
- Teste um novo registro com acentos e emoji.
- Compare leitura no phpMyAdmin e na aplicação para separar armazenamento de exibição.
PHP e MySQL
Com PDO, declare o charset na conexão e use consultas preparadas:
$pdo = new PDO(
'mysql:host=localhost;dbname=app;charset=utf8mb4',
$usuario,
$senha,
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
Com mysqli, use $mysqli->set_charset('utf8mb4');. Não tente corrigir com funções como utf8_encode() em todas as saídas; além de obsoletas em versões recentes, elas escondem o ponto real da inconsistência.
Charset e collation
utf8mb4 suporta todo o Unicode. A collation define comparação e ordenação, não os bytes em si. Antes de converter uma tabela, valide índices, tamanho de colunas, versão do MySQL/MariaDB e compatibilidade da aplicação. Faça dump, restaure em homologação e compare contagens e amostras.
Importação CSV e migração
Confirme a codificação de origem, delimitador e escape. Excel pode salvar CSV em formatos diferentes; prefira “CSV UTF-8”. Ao migrar, não presuma que o texto declarado como Latin-1 realmente contém Latin-1. Teste nomes, acentos, aspas, símbolos monetários e emoji.
Quando o texto já foi corrompido
Restaure uma cópia confiável ou escreva uma transformação específica depois de analisar os bytes. Execute primeiro em uma cópia, registre linhas afetadas e nunca aplique a mesma conversão mais de uma vez. Se apenas a exibição está errada, corrigir cabeçalho/conexão pode revelar os dados intactos sem regravá-los.
Recursos relacionados
Continue com materiais e serviços relacionados ao tema deste guia.