Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou tendo problemas com acentuação, das informações que estão no banco de dados.
No servidor que está na produção atualmente, rodando uma Intranet, está funcionando normalmente, numa versão mais antiga no XAMPP.
MySQL: 5.1.41
PHP: 5.4
Collation do BD: utf8_general_ci
Segue, como está no banco de dados, e como aparece no HTML.
---
Porém, formatei o meu computador recentemente, e nele instalei a versão mais atual do XAMPP, com PHP 8.2.
Criei o bando de dados também com a mesma collation, utf8_general_ci, porém no meu localhost, os acentos aparecem todos zuados.
Uma coisa que percebi, é que no servidor da Intranet, no banco de dados, os acentos ficam zuados, mas no PHP/HTML mostra os acentos corretamente.
Já no meu computador, os acentos ficam com problema.
É alguma relação com a versão do MySQL? É a Collation errada que estou usando?
Obrigado.

@tetsuo boa tarde,
1) coloquei em anexo (na abertura do tópico), como está no banco de dados, tanto no servidor onde está rodando atualmente (versão mais antiga) e como está no meu computador (versão mais nova).
2) vou alterar na conexão pra fazer um teste
3) usando mysqli
Mais um detalhe
No servidor da intranet, grava no banco de dados com os caracteres esquisitos (como coloquei em anexo ali), porém quando mostro a informação do banco de dados, ficam corretos.
Mas no meu server localhost aqui, não consegue mostrar os acentos.
Os dados que já tem no banco de dados, estou com esse problema nos acentos. Porém se eu cadastrar um novo registro, eles ficam corretos, pois grava no banco de dados os acentos.
Olá!
Primeira sugestão é ajustar o texto no seu database, para que visualize corretamente.
Como o colega sugeriu acima, no mysqli, se define utf-8 para a conexão assim:
// definição de variáveis para conexão
$host = 'localhost'; // servidor
$user = 'root'; // nome do utilizador
$pass = 'my-secret-pw'; // senha ou password
$database = 'imasters'; // nome da base de dados
// estabelecer conexão:
$sqli = new mysqli($host, $user, $pass);
// definir o padrão de caracteres
$sqli->set_charset('utf8');
// selecionar/abrir o banco de dados para trabalhar
$sqli->select_db($database)
@washalbano bom dia.
Fiz como você falou, o problema persiste.
Eu acredito que seja algo com as versões mais novas do MySQL, do XAMPP.
Pois os bancos de dados são iguais, o Collation iguais.
Minha preocupação, é quando eu atualizar no servidor da intranet, para as versões mais novas, vai dar bug na acentuação em todos os dados já cadastrados.
Me parece que não adianta nada agora tentar corrigir a codificação de caracteres, pois o problema ocorreu quando os dados foram registrados.
Vale ressaltar também que a codificação da aplicação também deve ser definida na mesma codificação usada pelo charset.
Detalhes como a própria criação da tabela também vão ter grande relevância, exemplo:
CREATE TABLE `exemplo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`texto` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
De qualquer forma um simples solução para codificação de caracteres é nunca usar acentuação e sim entidades das mesmas, exemplo:
$salvar = htmlentities('João é um menino');
/*
No banco de dados fica salvo assim:
Mas sempre que for exibido no html não importa qual a codificação será:
Se fosse meu caso e não ´pudesse reiniciar o banco de dados estaria a criar um mapa de caracteres desses que estão "diferentes".
Criaria um programa - que automaticamente faria a leitura > converteria os estranhos para seu estado real > faria a atualização dos registros usando a função htmlentities.
Lógico que alteraria a aplicação para que quando algum registro seja inserido ou alterado passe pela função htmlentities.
Então nunca mais teria problemas relacionados ao charset seja lá qual for a codificação usada.
1) como os dados estão no database?
2) cerfique-se de definir utf-8 para a conexao com o database
está usando mysqli ou pdo?