Problemas de codificação de caracteres: MySQL 5.0 + Php 5.2
-
26-09-2019 - |
Pergunta
Eu tenho um banco de dados MySQL com uma tabela innodb que contém os campos varchar utf8_general_ci. Quando eu os busco através do PHP (via Pear :: MDB2) e tento produzi -los (via Smarty), eu entendo ??? símbolos. Eu gostaria de saber como resolver esse problema, o que provavelmente é causado pelo PHP.
Boas informações para saber:
- É uma nova versão do site em que estou trabalhando, a versão antiga teve o mesmo problema, mesmo que não usasse Smarty nem MDB2, então eles provavelmente não são a causa. O antigo programador usou htmlentities () para remediar o problema, mas estou tentando evitar isso.
- A codificação de caracteres de todos os meus arquivos (modelo, fonte etc.) é UTF-8 sem BOM.
- Quando exibo uma página, todos os caracteres acentuados (os dos modelos, não os que vêm do MySQL) são mostrados corretamente e a codificação no navegador é UTF-8. Se eu alterná-lo manualmente para ISO-8859-1, o personagem do MySQL será emitido corretamente, mas não os outros.
Basicamente, parece que o PHP ou o MySQL transforma os dados UTF-8 contidos no banco de dados para ISO-8859-1 em algum momento durante o processo de consulta/busca, e é isso que eu quero corrigir.
Eu fiz muita pesquisa, mas não encontrei nenhuma solução e espero que o problema esteja em um ambiente em algum lugar. Eu gostaria de evitar ter que usar htmlEntities () ou utf8_encode (), no entanto, esse pode ser o único caminho a percorrer até o Php6 aparecer.
Obrigado por sua opinião sobre isso!
Solução
Você precisa executar algumas consultas para dizer para usar o UTF-8 para a conexão (o padrão é realmente latino-1). Aqui está o que eu uso:
SET CHARACTER SET = "utf8";
SET character_set_database = "utf8";
SET character_set_connection = "utf8";
SET character_set_server = "utf8";
Eu sei que alguns deles parecem exagerados, mas eles foram testados e parecem funcionar muito bem ...
Outras dicas
Meu palpite é que os dados não foram codificados por UTF-8 quando atingem o banco de dados.