Se você trabalha com sistemas legados em PHP, provavelmente já enfrentou o problema de acentos corrompidos ao migrar de ISO-8859-1 para UTF-8. Este guia mostra como fazer a conversão corretamente.
O problema
Sistemas antigos (especialmente Firebird/InterBase) armazenam dados em ISO-8859-1. Quando você tenta exibir em UTF-8 sem conversão, os acentos viram caracteres estranhos.
Solução 1: mb_convert_encoding
$texto = mb_convert_encoding($texto, 'UTF-8', 'ISO-8859-1');
Solução 2: iconv
$texto = iconv('ISO-8859-1', 'UTF-8//TRANSLIT', $texto);
Solução 3: Para Firebird (conexão)
Ao conectar ao Firebird, especifique o charset:
$pdo = new PDO('firebird:dbname=localhost:/path/to/db.fdb;charset=ISO8859_1', $user, $pass);
Dica de SQL
Se precisar verificar quais registros têm encoding incorreto no banco:
SELECT nome FROM clientes WHERE nome CONTAINING 'Ã' OR nome CONTAINING '�'
Precisa gerar queries SQL para verificar encoding no seu banco? Use o Sqlify — descreva em português e receba a query pronta.
Conclusão
Sempre converta na camada de apresentação, nunca no banco. Mantenha o banco no charset original e converta na saída.