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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top