Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sandler Riot

Problemas com caracteres vindo do MySQL

Recommended Posts

Opa galera, beleza? =)

 

Seguinte... Estou com problemas com os caracteres que trago da base de dados MySQL.

 

Meu HTML:

<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />

Uso acentuação normalmente no cod html, sem utilizar html entities.

 

Os dados no MySQL, também estão sem htmlentities.

 

Mas ao puchar e exibilos na página, eles aparecem tudo desconfigurado!

 

Se eu jogo na base de dados MySQL com htmlentities, também aparecem desconfigurado.

 

Só funciona de forma: usando a função htmlentities(variavel);

 

Porem... Desta forma não reconhece as Tags html que eu jogo em algumas coisas que estão na base de dados.

 

Então a dúvida é:

 

No meu HTML utilizo o charset utf-8, qual deve ser a forma do charset da base de dados e como devo puchr estes valores para nao ter problemas com caracteres?

 

Obrigado. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use isso:

<meta http-equiv="content-type" content="application/xhtml+xml;charset=iso-8859-1">

Porem acredito que seu problema não seja com o HTML.

Amigo como vêem os caracteres do DB, ponha um exemplo.

 

Algo tipo:

Administração, Ciências Contábeis,

????????????????

 

Se for e arrumar o HTML não funcionar, faça assim:

while($linha = mysql_fetch_row($sql)){
   echo ut8_decode($linha["nome"]);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faça adaptações para corrigir esses erros, ao menos que, sua aplicação ja esteja no ar e você prescisa resolver logo.

 

Faça o seguinte:

 

Crie sua Base de Dados MySql em utf8.

As tabelas da base tambem devem ser utf8. (Se você não declarar nada, o banco vai pegar o que esta definido na base de dados, no caso utf8)

Na suas paginas você tem que usar o header do PHP utf8: <?php header('Content-Type: text/html; charset=UTF-8'); ?>

E por fim a meta tag HTML: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

Falow. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

m@dDog, valeu brother.

 

Era isso que eu estava precisando... Agora sei o que eu tenho que definir em UTF-8: a base, a tabela, o header do php e o html.

 

Desta forma poderei usar minhas palavras da seguinte forma: Avião (sem html entities).

 

Correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só galera, preciso de ajuda.

 

No meu html, eu defini:

meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />

 

No meu php, eu defini:

header('Content-Type: text/html; charset=UTF-8');

Minha base de dados, eu defini:

Imagem Postada

Minha tabela no banco, esta com os caracteres assim:

Imagem Postada

 

No meu site, eles se mostram assim:

Imagem Postada

 

Como posso solucionar isso? =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

só mais uma pergunta para prosseguirmos

 

qual navegador está usando ?

 

cerificou-se de que o navegador está setado para identificar o charset ?

 

 

* IE

View -> Encoding

 

* FF

View -> Character Encoding

Compartilhar este post


Link para o post
Compartilhar em outros sites

FireFox

Imagem Postada

 

 

IE

Imagem Postada

 

 

 

Como pode ver, em ambos ele ta normalmente funcionando com UTF, assim como eu defini no html e no php... Porem, o caractere ta vacilando....

 

E mesmo se, no navegador, eu mudar o charset por ex pra iso, ele ainda continua bugado.

 

ATt;

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok,

 

teste 1

 

antes de chamar "mysql_query" para executar a query

execute a setagem do charset, especificando para UTF8

 

escopo

mysql_query( "SET NAMES 'UTF8'", DB_RESOURCE );
mysql_query( QUERY_SQL , DB_RESOURCE );

 

exemplo

mysql_query( "SET NAMES 'UTF8'", DB_RESOURCE );
mysql_query( "SELECT * FROM TableName" , DB_RESOURCE );

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom;

 

Não funcionou =/

 

Acho que vou ter que redigitar tudo no banco de dados.

 

Pergunta: Na base de dados, usando a codificação utf, é necessário que os textos estejam com ou sem htmlentities?

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom;

 

Olha só como estão os caracteres no meu banco de dados:

 

Esta assim:

PRODUÇÃO

Isso esta incorreto, não é?

 

Estou trabalhando com UTF, como é o jeito correto para estar no banco:

 

Htmlentities

Informática

Sem htmlentities

Informática

 

Obs: Quando isso foi adicionado ao banco, foi no copia e cola pegando do word, possivelmente isso trouxe algum problema, não trouxe?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tava com o mesmo problema,

ai resolvi inserindo o texto com acentuação normal no mysql, ficando correto nele,

e ao exibir tratei usando o

 

utf8_decode($variavel);

 

assim exibe corretamente os acentos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

como segundo teste siga dica do DouglasP

 

 

 

Obs: Quando isso foi adicionado ao banco, foi no copia e cola pegando do word, possivelmente isso trouxe algum problema, não trouxe?

como assim ?

 

o texto estava no [office word] entçao copiou e colou [em qual software] para gravar no banco ?

 

 

Acho que vou ter que redigitar tudo no banco de dados

se forem poucos dados, sem problemas faz na mão mesmo, senão, podemos encontrar solução sem partir pro desespero rs..

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom;

 

Não estava no Word, estava no Excel, do pacote Office da MS.

 

A pessoa copiou e foi colando na tabela no Frontend MySQL Yog, jogando diretamente no banco. Sera que assim pode ter levado alguma configuração de caractere, sei lá?

 

 

De fato, não ta legal, vou redigitar os valores no banco tirando estes caracteres malucos e por da forma normal. Ai funciona.

 

=/

Compartilhar este post


Link para o post
Compartilhar em outros sites

já tentou o utf8_encode()????

 

as vezes resolve...

 

Mas, importante: sempre use o charset da página como ISO-8859-1...

 

Sei por experiência própria que ele dá muito menos problemas que o UTF-8...

Compartilhar este post


Link para o post
Compartilhar em outros sites

precisaria verificar qual encoding estava usando quando inseriu os dados usando o Yog.

 

 

se quiser, mais 2 testes

 

1. usando a função mb_detect_encoding tente obter qual encode está no banco

faça um select simples SELECT field FROM table

e jogue na função "mb_detect_encoding" pra ver se consegue detectar o encoding

 

 

2. faça um backup dos dados e execute isso:

ALTER TABLE `NomeDoBanco`.`NomeDaTabela` CHARACTER SET utf8 COLLATE utf8_general_ci;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com o mesmo problema, estou desesperado. Achei que tinha achado uma solução, mas ainda não deu. Tinha feito uma gambiarra monstruosa, mas nem assim funcionou.

Estou colocando tudo em UTF-8

HTML

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

No PHP

header('Content-Type: text/html; charset=UTF-8');

Estou usando AJAX (Prototype)

 

Já coloquei no Prototype também

Ajax.Base = Class.create({
  initialize: function(options) {
	this.options = {
	  method:	   'post',
	  asynchronous: true,
	  contentType:  'application/x-www-form-urlencoded',
	  encoding:	 'utf-8',
	  parameters:   '',
	  evalJSON:	 true,
	  evalJS:	   true
	};

No MySql está tudo usando UTF-8-general-ci.

 

O problema é o seguinte: Se eu olho no banco pelo MySQL Query Browser, aparece tudo correto, com acentos e afins. Se olho pelo PhpMyAdmin, aparece assim - S�o Jos� (São José). Quando exibe via Ajax ou direto via PHP, exibe assim também: S�o Jos�. Já conferi e o navegador está usando UTF-8.

 

Alguém tem mais alguma sugestão? Parece ser um problema eterno. Já tentei usar tudo ISO-8859, mas também não funcionou.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

matias_rezende mantenha suas duvidas no seu topico.

 

Agora vamos a sua duvida ^^

Talvez tenha que usar utf8_encode();,

 

while($linha){
   echo utf8_encode($linha["nome"]);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi o que eu falei, silverfox...

 

Já tive o mesmo problema com esses caracteres "�"

 

Resolvi com o utf8_encode();

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ai Sandler, resolveu?

 

Eu estou usando tudo utf8 e não tenho problemas, não uso htmlentities e só uso o utf8_decode para gerar relatórios PDF, pois a biblioteca que uso não suporta utf8, mas ja existem alguma bibliotecas mais novas que tem suporte.

Quando usei tudo utf8, facilitou o uso de ajax, como citou o matias_rezende.

Da uma reparada, os grandes usam utf8, como o Google, Yahoo e etc.

 

Eu acredito que o seu problema está na conexão com o banco, tipo o que a hinom disse:

mysql_query( "SET NAMES 'UTF8'", DB_RESOURCE );
mysql_query( QUERY_SQL , DB_RESOURCE );

É que eu uso uma framework php (lá é só passar na conexão, 'encoding' => 'utf8') e nunca fiz conexão utf8 no banco sem usar framework, por isso não sei bem como deve ser.

 

Agora, para vizualisar com sua aplicação (phpMyAdmin, MySQLFront, EMS e etc) pose ser que tambem tenha que alterar sua conexão com a base de dados

/* Mostra as variáveis */
SHOW VARIABLES LIKE '%character%'	
SHOW VARIABLES LIKE '%coll%'

/* Seta as variáveis para a codificação que você deseja */
SET NAMES latin1
SET NAMES utf8
SET CHARACTER SET 'latin1'
SET CHARACTER SET 'utf8'

/* Seta o character_set_server para codificação que você deseja*/
SET character_set_server = latin1
SET character_set_server = utf8

Antes de alterar estas conexões, use SHOW VARIABLES LIKE '%character%' e de um print na tela para não perder a forma original da sua conexão com a base de dados.

Tem que ir testando. Estes comandos não vão alterar seu banco, apenas sua conexão com a base de dados.

 

 

Falow.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi o que eu falei, silverfox...

 

Já tive o mesmo problema com esses caracteres "�"

 

Resolvi com o utf8_encode();

Sim eu sei que foi o que você falou, mas é que eu passei um exemplo pratico por que as vezes ele poderia não entender como usar ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.