Jump to content
silas_i

[Resolvido] Acentuação UTF-8 e ISO

Recommended Posts

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á!

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

  • +1 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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:

Share this post


Link to post
Share on other sites

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:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.