• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

skin

[Mysql, PHP] Problemas com charset

4 mensagens neste tópico

Hey, para variar um bocado ando com problemas nos charsets.

A questão é a seguinte, a utilizar utf-8 na página de adicionar entradas à base de dados ele inseriu isto na base de dados "Teste ç nº1 não?" e por acaso quando é para visualizar a entrada ele está a escrever direito: "Teste ç nº1 não?". Caso eu introduza directamente na base de dados "Teste ç nº1 não?" ele já me vai mostrar na página "Teste � n�1 n�o "..

É estranho não?

Outra coisa que acontece é que um script idêntico ao em cima mencionado, também com a página a funcionar em utf-8 já introduz os dados na tabela correctamente e mostra-os correctamente ( a tabela da base de dados é outra ).

Alguém sabe o porquê?

Tabela mencionada primeiramente:

CREATE TABLE `calendario` (

  `id` int(255) NOT NULL auto_increment,

  `titulo` varchar(100) NOT NULL,

  `corpo` varchar(500) NOT NULL,

  `data` varchar(10) NOT NULL,

  `level` tinyint(1) NOT NULL default '8',

  `owner` tinyint(4) NOT NULL,

  PRIMARY KEY  (`id`)

) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--

-- Extraindo dados da tabela `calendario`

--

INSERT INTO `calendario` (`id`, `titulo`, `corpo`, `data`, `level`, `owner`) VALUES

(1, 'Teste nº1 ', 'ça ã á à ASD', '12-12-2008', 8, 0),

(2, 'Teste ç nº1 não?', 'Testar comunicado com caracteres marados também, ã, á, ç, õ ? º ª *', '17-11-2009', 8, 4);


Segunda tabela:

CREATE TABLE `users` (

  `ID` tinyint(5) NOT NULL auto_increment,

  `name` varchar(100) NOT NULL,

  `username` varchar(20) NOT NULL,

  `email` varchar(100) NOT NULL,

  `hideMail` tinyint(1) NOT NULL default '0',

  `level` tinyint(1) NOT NULL default '8' COMMENT 'goto rp_perms',

  `image` text NOT NULL,

  `aboutme` text NOT NULL,

  `birthdate` varchar(10) NOT NULL,

  `articlesnum` int(255) NOT NULL,

  `postsnum` int(255) NOT NULL,

  `lastvisit` varchar(16) NOT NULL default 'Nunca Entrou',

  `IP` tinytext NOT NULL,

  `password` varchar(32) NOT NULL,

  `active` tinyint(1) NOT NULL default '0' COMMENT '0 -> nada confirmado 1 -> confirmação de email 2 -> confirmação de administrador 3 -> banido',

  `date` varchar(10) NOT NULL COMMENT 'dd-mm-aaaa',

  PRIMARY KEY  (`ID`),

  UNIQUE KEY `nickname` (`username`)

) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=29 ;

--

-- Extraindo dados da tabela `users`

--

INSERT INTO `users` (`ID`, `name`, `username`, `email`, `hideMail`, `level`, `image`, `aboutme`, `birthdate`, `articlesnum`, `postsnum`, `lastvisit`, `IP`, `password`, `active`, `date`) VALUES

(4, 'testeteççã', 'testete', 'testtee@teste.pt', 0, 0, '', 'asdaioduw tqre gerf sdfç as sad', '', 1, 0, '27-09-2008 23:48', '127.0.0.1', 'd1af057b301e56b8ac7d3d77a6a53cc1', 2, '28-08-2008')

As tabelas não estão com GeSHi porque o SQL GeSHi passa os ç ã, etc para html entities.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se na tua página tiveres charset utf8, podes fazer por exemplo:

mysql_query("INSERT INTO nomes (Nome) VALUES('".utf8_encode($_POST[nome])."')");

Depois, na tua página é só mostrares normalmente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas assim ele está a introduzir os dados assim na base de dados:" Teste nº ç 1" e depois na página escreve "Teste � � n�"  :thumbdown:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

A solução passa por definires o charset e o collation por query ao mysql :

SET NAMES 'utf8' COLLATE 'utf8_general_ci';

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora