Paulo de Tarso F. M. 24 Denunciar post Postado Outubro 3, 2008 Me desculpem resgatar este tópico, mas é que minha dúvida se relaciona a isso, e eu não ía criar um novo tópico para falar sobre isso, não é? Bom, é o seguinte, estou querendo trabalhar com codificação UTF-8 e, como não poderia ser diferente a qualquer mudança, estou tendo problemas. Bom, vamos por partes. 1) O Banco de Dados (MySQL): Tenho uma tabela de categorias, a qual está utilizando a codificação Collation: utf8_general_ci, e as colunas dessa tabela também estão usando a mesma Collation. 2) O arquivo PHP: O meu arquivo PHP que recbe os resultados do Banco está assim: <?php header("Content-Type: application/xhtml+xml; charset=utf-8", true); echo "<?xml version='1.0' encoding='UTF-8'?>\n"; ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br"> <head> <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" /> [continua]Até aqui, não está tudo como deveria? Eu verifiquei os dados no Banco, estão todos corretos. Para ter certeza que os dados estariam corretos, eu criei uma nova tabela e inseri os dados novamente. Mas... Quando tenho palavras acentuadas, ele está retornando aquele losango com um sinal de interrogação dentro (no caso do Firefox) no lugar do caractere. Mas é assim, tirando o Banco, ele apresenta erros da mesma forma. Estou trabalhando com includes, e adicionei inclusive este trecho em cada arquivo de include: header("Content-Type: application/xhtml+xml; charset=utf-8", true);Mas não adianta, os caracteres acentuados são exibidos com aquele losango. E o engraçado é que, se eu pego o conteúdo do include e coloco diretamente na página que o chama, aí não apresenta erros! Mas os dados do Banco continuam com erros (tudo bem, resolvendo este do include, depois verifico o do Banco). Pergunto-lhes: o que deve ser feito para que os includes sejam exibidos corretamente com uso do charset UTF-8? Como falei, depois verifico o banco... Obrigado desde já! Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Outubro 4, 2008 verifique se o editor de textos está usando encode UTF-8 pode ser que você esteja usando um editor de textos com encoding LATIN_ISO ou algum outro Compartilhar este post Link para o post Compartilhar em outros sites
L2mago 1 Denunciar post Postado Setembro 22, 2009 Opa pessoal. Estive acompanhando este tópico e sei que ele está "resolvido". Mas, com o perdão da palavra, não resolveram não. O padrão UTF-8 é o mais indicado para os sites de hoje em dia. O problema é que muita gente encontra problemas ao resolver isso no HTML + PHP + MySQL. O UTF-8 suporta acentos SIM. O UTF-8 suporta outras letras de outros idiomas. Isso significa que o ISO-8859-1 está meio desatualizado. A W3C recomenda UTF-8. Porém, se vocês adicionarem essas tags: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br"> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ... Não é nescessário adicionar o comando: <?php header('Content-Type: text/html; charset=utf-8') ?>Isso é muito errado, pois o Validador da W3C acusa erro de dois headers, e avisa que considerará apenas um. Uma forma de ajustar isso e ver onde está errado é: Configurar seu editor de texto para salvar em UTF-8. Dar um ECHO no PHP com acentos para ver se está correto. Escrever acentos no HTML para ver se está correto. Ajustar a base de dados para utf8 e utf8_unicode_ci juntamente com as tabelas. Só que isso todos fazem, e nunca da certo. Isso porque o canal que o PHP abre com o MySQL, tanto para consulta, exibição e conexão, por padrão é latin1. Para resolver este problema, basta apenas adicionar os seguintes comandos após a conexão ser aberta: mysql_query("SET NAMES 'utf8'"); mysql_query('SET character_set_connection=utf8'); mysql_query('SET character_set_client=utf8'); mysql_query('SET character_set_results=utf8'); Com isso, o PHP para de tentar converter para latin1 o UTF-8, e o browser passa a exibir corretamente os acentos dentro dos padrões hoje utilizados. Só isso. Espero que sirva para quem veio até aqui, e também para quem venha a ter essa dúvida. Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Setembro 23, 2009 L2mago isso que você comentou está certo mas não condiz com o tópico no tópico nao diz que UTF-8 não é o correto. a escolha do encoding depende da decisão de cada desenvolvedor. pessoalmente sempre aconselho uso do UTF-8. consulte: PHP, HTML, MySQL - Charset Encoding Compartilhar este post Link para o post Compartilhar em outros sites
L2mago 1 Denunciar post Postado Setembro 23, 2009 Olá Moderador, estava apenas dando uma resposta ao que o Rails disse: porque o utf8 dá erros? porque ele não contém acentos xD o padrão que você tem que usar é o iso.. olha só.. pra html: <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" /> pro php: <?php header("Content-Type: text/html; charset=ISO-8859-1",true);?> Cada um escolhe sim, o charset que quiser. Como também podemos escolher usar XHTML/CSS ou HTML antigo. Achei meio desnecessária sua resposta. Mas faça um retorno do banco neste teu link do jeito que criou, e terá o mesmo erro citado aqui. De nada. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Setembro 23, 2009 1. veja data do tópico 2. analise as circuntâncias 3. analise o que escreveu e veja se há coerência com o contexto do tópico. 4. falow Compartilhar este post Link para o post Compartilhar em outros sites
L2mago 1 Denunciar post Postado Setembro 23, 2009 Cara, isso é ridículo. Eu vi que o tópico estava fechado, e era um pouco antigo. Apenas deixe uma informação, como também disse no meu post, para quem viesse futuramente. Circunstâncias? Há coerência no que eu escrevi, pois a solução do tópico foi voltar para ISO-8859-1 o que o cara queria fazer em UTF-8. A solução está ai para quem não quiser ver seus dados retornando distorcidos, e ainda pretendem manter formato UTF-8. Agora, você quer retrucar tudo o que eu escrevo, e ainda cisma que não era essa a solução. Isso não é moderação, é tripúdio. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Setembro 23, 2009 ok Compartilhar este post Link para o post Compartilhar em outros sites
karpov 0 Denunciar post Postado Dezembro 9, 2009 Opa pessoal. Estive acompanhando este tópico e sei que ele está "resolvido". Mas, com o perdão da palavra, não resolveram não. O padrão UTF-8 é o mais indicado para os sites de hoje em dia. O problema é que muita gente encontra problemas ao resolver isso no HTML + PHP + MySQL. O UTF-8 suporta acentos SIM. O UTF-8 suporta outras letras de outros idiomas. Isso significa que o ISO-8859-1 está meio desatualizado. A W3C recomenda UTF-8. Porém, se vocês adicionarem essas tags: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br"> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ... Não é nescessário adicionar o comando: <?php header('Content-Type: text/html; charset=utf-8') ?>Isso é muito errado, pois o Validador da W3C acusa erro de dois headers, e avisa que considerará apenas um. Uma forma de ajustar isso e ver onde está errado é: Configurar seu editor de texto para salvar em UTF-8. Dar um ECHO no PHP com acentos para ver se está correto. Escrever acentos no HTML para ver se está correto. Ajustar a base de dados para utf8 e utf8_unicode_ci juntamente com as tabelas. Só que isso todos fazem, e nunca da certo. Isso porque o canal que o PHP abre com o MySQL, tanto para consulta, exibição e conexão, por padrão é latin1. Para resolver este problema, basta apenas adicionar os seguintes comandos após a conexão ser aberta: mysql_query("SET NAMES 'utf8'"); mysql_query('SET character_set_connection=utf8'); mysql_query('SET character_set_client=utf8'); mysql_query('SET character_set_results=utf8'); Com isso, o PHP para de tentar converter para latin1 o UTF-8, e o browser passa a exibir corretamente os acentos dentro dos padrões hoje utilizados. Só isso. Espero que sirva para quem veio até aqui, e também para quem venha a ter essa dúvida. Abraços. Pessoal, sei que este item já foi setado como RESOLVIDO. Mas gostaria de fazer algumas considerações: Nosso amigo Lmago postou com muita propriedade duas coisas, uma a solução para se resolver um problema que é uma constante na vida de muitos desenvolvedores, no qual me incluo e a outra é que a grande maioria das postagens sobretudo em nível de desenvolvimento não se tornam obsoletas. Eu mesmo me tornei membro deste Fórum, e o acho uma referência justamente por sempre encontrar as soluções ou caminhos ou um 'pesquise mais a respeito, porém me dando uma linha de direcionamento sobre onde pesquisar ou o que pesquisar', a partir de postagens que ocorreram a anos atrás. Sendo assim aproveito a oportunidade para agradecer ao Lmago e a todos os que postam suas dúvidas pois delas vêm as soluções, aos que postam soluções e/ou caminhos para tal e sobretudo a Equipe Imasters que aumentando a cada dia o poder de abstração, permite que sejamos a potência que somos no que tange a Produzir Internet no Brasil. Agora talvez burlando alguma regras do Fórum, e nós desenvolvedores/designers fomos feitos sobretudo para burlar as regras de modo a criarmos novas regras, tenho uma dúvida apartir da colocação do Lmago que se alguém puder esclarecer ficarei grato. Minha grande dor de cabeça com charset começou com o surgimento do Ajax. Visto que ele (desculpe-me se estiver enganado) trabalha específicamente com UTF8, e aí preciso fazer os encondes/decodes para ter renorno em ISO-8859-1. Neste caso, aplicando a sua sugestão, os caracteres brasileiros seriam carregados normalmente, ou seja acentos, caracteres especiais, etc.? Ou teria que continuar com os decodes nesse caso? Agradeço a ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
karpov 0 Denunciar post Postado Dezembro 9, 2009 Pessoal, Achei duas páginas super interessantes para resolver problemas de conversão de Charset. Para pequenos reparos ou reparos rápidos (com direito a conversão on-line) http://www.unicodetools.com/unicode/utf8-to-latin-converter.php Classe em PHP para repararar seu banco de dados inteiro: http://www.phpwact.org/php/i18n/utf-8/mysql Compartilhar este post Link para o post Compartilhar em outros sites
rafael wisch 0 Denunciar post Postado Junho 2, 2010 Opa pessoal. Estive acompanhando este tópico e sei que ele está "resolvido". Mas, com o perdão da palavra, não resolveram não. O padrão UTF-8 é o mais indicado para os sites de hoje em dia. O problema é que muita gente encontra problemas ao resolver isso no HTML + PHP + MySQL. O UTF-8 suporta acentos SIM. O UTF-8 suporta outras letras de outros idiomas. Isso significa que o ISO-8859-1 está meio desatualizado. A W3C recomenda UTF-8. Porém, se vocês adicionarem essas tags: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br"> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ... Não é nescessário adicionar o comando: <?php header('Content-Type: text/html; charset=utf-8') ?>Isso é muito errado, pois o Validador da W3C acusa erro de dois headers, e avisa que considerará apenas um. Uma forma de ajustar isso e ver onde está errado é: Configurar seu editor de texto para salvar em UTF-8. Dar um ECHO no PHP com acentos para ver se está correto. Escrever acentos no HTML para ver se está correto. Ajustar a base de dados para utf8 e utf8_unicode_ci juntamente com as tabelas. Só que isso todos fazem, e nunca da certo. Isso porque o canal que o PHP abre com o MySQL, tanto para consulta, exibição e conexão, por padrão é latin1. Para resolver este problema, basta apenas adicionar os seguintes comandos após a conexão ser aberta: mysql_query("SET NAMES 'utf8'"); mysql_query('SET character_set_connection=utf8'); mysql_query('SET character_set_client=utf8'); mysql_query('SET character_set_results=utf8'); Com isso, o PHP para de tentar converter para latin1 o UTF-8, e o browser passa a exibir corretamente os acentos dentro dos padrões hoje utilizados. Só isso. Espero que sirva para quem veio até aqui, e também para quem venha a ter essa dúvida. Abraços. sei que isso já está resolvido, e o tópico fechado a algum tempo, mesmo assim gostaria de deixar minha consideração... MUITO OBRIGADO MESMO... VOCÊ RESOLVEU MEU PROBLEMA DE MTO TEMPO... APESAR DE PARECER SIMPLES MEXER COM CHARSET, EU QUERO VER O "PROFISSIONAL" ou amador que nunca tenha passado por problemas com ele... e isso resolveu 100% pra mim... parabéns e obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
xizun 0 Denunciar post Postado Junho 9, 2010 Parabens L2Mago sua forma deu certo. Compartilhar este post Link para o post Compartilhar em outros sites
leandroecomp 0 Denunciar post Postado Agosto 18, 2010 Outra solução que funcionou comigo é editar o php.ini. Procurar por mysql.connect_charset e trocar para utf8 ou latin1 de acordo com a necessidade. Compartilhar este post Link para o post Compartilhar em outros sites
tmdesigner 0 Denunciar post Postado Junho 28, 2011 Opa pessoal. Estive acompanhando este tópico e sei que ele está "resolvido". Mas, com o perdão da palavra, não resolveram não. O padrão UTF-8 é o mais indicado para os sites de hoje em dia. O problema é que muita gente encontra problemas ao resolver isso no HTML + PHP + MySQL. O UTF-8 suporta acentos SIM. O UTF-8 suporta outras letras de outros idiomas. Isso significa que o ISO-8859-1 está meio desatualizado. A W3C recomenda UTF-8. Porém, se vocês adicionarem essas tags: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br"> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ... Não é nescessário adicionar o comando: <?php header('Content-Type: text/html; charset=utf-8') ?> Isso é muito errado, pois o Validador da W3C acusa erro de dois headers, e avisa que considerará apenas um. Uma forma de ajustar isso e ver onde está errado é: Configurar seu editor de texto para salvar em UTF-8. Dar um ECHO no PHP com acentos para ver se está correto. Escrever acentos no HTML para ver se está correto. Ajustar a base de dados para utf8 e utf8_unicode_ci juntamente com as tabelas. Só que isso todos fazem, e nunca da certo. Isso porque o canal que o PHP abre com o MySQL, tanto para consulta, exibição e conexão, por padrão é latin1. Para resolver este problema, basta apenas adicionar os seguintes comandos após a conexão ser aberta: mysql_query("SET NAMES 'utf8'"); mysql_query('SET character_set_connection=utf8'); mysql_query('SET character_set_client=utf8'); mysql_query('SET character_set_results=utf8'); Com isso, o PHP para de tentar converter para latin1 o UTF-8, e o browser passa a exibir corretamente os acentos dentro dos padrões hoje utilizados. Só isso. Espero que sirva para quem veio até aqui, e também para quem venha a ter essa dúvida. Abraços. Salvou a pátria meu amigo. Desde que iniciei a programação PHP eu ninguém, mas ninguém, nem professor consegui explicar o lance do collaction e charset. Com simples argumento já entendi tudo e funcionou. Devido a este problema, sem fiz meus sistemas com latin1 mas já sabia que o melhor seria utf8 até porque a w3c recomenda. Com isso, ufaaaaaaaa! Nem acredito. Todos os novos sistemas será modelado em utf8 até que em fim!!! Nota 10 pro brodi ai! Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 29, 2011 Não é necessário usar o SET NAMES ou SET Character para cada conexão com o banco se o mesmo estiver corretamente configurado. O mesmo se dá para os casos onde usuários apontam o uso de utf8_encode() como solução definitiva. 1. Isso serve apenas para os casos onde se torna inviável consertar o charset de um sistema inteiro, ou seja, é uma gambiarra. 2. consome processos do servidor. É pouca coisa mas, somatize os diversos processos pequenos e irrelevantes e terá um problema dos grandes. 3. Padronização do código, internacionalização. Compartilhar este post Link para o post Compartilhar em outros sites
Kayo21 0 Denunciar post Postado Abril 10, 2015 silas_i tá no php você tá puxando arquivo de banco de dados? se for o banco pode estar em utf8 e as tabelas em latin_1 ou utf8 porque o utf8 dá erros? porque ele não contém acentos xD o padrão que você tem que usar é o iso.. olha só.. pra html: <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" /> pro php: <?php header("Content-Type: text/html; charset=ISO-8859-1",true);?> os dois tem que ficar em iso pra nenhum ficar invertendo entendeu? ^^ caso seja menu em flash que eu acho que não é! você teria que arrumar ele na opção de idiomas.. não lembro a localização exata no menu, não tenho flash aqui nesta máquina.. abraço ^^ Valeu cara resolveu o meu problema!! :joia: Compartilhar este post Link para o post Compartilhar em outros sites
lgdelai 0 Denunciar post Postado Junho 23, 2016 Mesmo com o tópico resolvido, quero postar a solução que eu encontrei talvez seja o caso de alguém que passe por aqui. :D Mesmo adicionando dentro da tag head a linha abaixo:<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> O problema dos acentos persistia.Então percebi no canto inferior direito do "notepad++" que a codificação estava em "ANSI", então eu fui em [Formatar] > [Converter para UTF-8 Sem BOM] e o problema foi resolvido.Eu utilizo o "Sem BOM" pois já tive outros problemas onde aparecia uma linha dividindo a página em alguns locais onde tinham DIVS ou Quebras de página, "não me lembro ao certo" sei que esta solução resolveu o problema e de lá pra cá sempre uso ela.Boa sorte. :ph34r: Compartilhar este post Link para o post Compartilhar em outros sites