Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

TheOne

[SEMI-RESOLVIDO] Codificação de caracteres PHP & MySQL

Mensagens Recomendadas

TheOne

Boas pessoal, cá vai mais uma dúvida...

Estou com um problema com os caracteres denominados latinos (ç, á, ã, õ, é, etc...). Na minha base de dados os campos têm codificação utf8_unicode_ci e no código php tenho por exemplo

GetSQLValueString(utf8_encode($_POST['servicos']), "text")

em que o campo 'servicos' vem de uma textarea.

O problema é que por mais voltas que dê os tais caracteres ficam sempre marados na base de dados...

Já agora, mais uma dúvida. Quero obter o máximo de um campo numérico. Faço "SELECT MAX(num) AS numMax FROM folha WHERE numCliente=1" (exemplo). Depois executo a query e obtenho o resultset. Faço:

$max = mysql_fetch_assoc(&rs);

$n = $max['numMax'];

só que não consigo obter nenhum valor...e o numCliente que procuro existe. Estou a extrair mal o valor do result set?

Alguém me pode dar uma ajudinha?

Cumps e obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tuxonice

Boas

se estás a utilizar unicode na base de dados tens de enviar os dados em UTF-8.

Experimenta executar este query logo após abrires a ligação à base de dados: "SET NAMES 'utf8'"

Tux

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheOne

Não dá,"é" fica "é"... também já experimentei fazer SET NAMES...

Cumps

P.S. E quanto à questão do MAX alguma ideia?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

É provável que tenhas de voltar a inserir os conteúdos na base de dados para que funcione.

Quanto ao max, não sei se foi exemplo escrito aqui ou não, mas tens um error aqui :

$max = mysql_fetch_assoc(&rs);

De qualquer modo, corre os resultados com um ciclo, é mais fiável.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheOne

Boas pessoal, já resolvi parcialmente o problema com o utf8_decode e colocando os campos da BD em UTF8_bin. Está tudo a funcionar bem só que às vezes acontece uma coisa esquisita...por exemplo, os caracteres estão todos bem depois entro num secção da página em que adiciono qq coisa à BD e volto atrás com o redirect após o INSERT. Mas quando a página anterior carrega os caracteres que estavam bem passam a ficar marados e o resto das páginas do site fica assim com os chars marados e isso só passa se fizer muitas vezes refresh à página (e nem sempre resulta...)

Alguma sugestão para enxotar estas bruxas que para aqui andam? :)

Cumps

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheOne

Pessoal, ainda tenho o problema dos caracteres de vez em quando. Descobri que tinha umas incompatibilidades de codificação entre a página e a BD e já corrigi pelo que os dados estão a ser sempre bem inseridos na BD.

Só que às vezes a ler os dados os caracteres especiais vêm mal (com um ponto de interrogação dentro de um losango), fazendo refresh várias vezes resolve mas não deixa de ser irritante.

Alguma sugestão? Isto não pode ficar assim :

Cumps

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NaDa

Eu meto latin1_sw..

E na pag utf-8..

E não tenho problemas desses :S

Pelo menos por enquanto :P

Na base de dados, sim, aparece tudo maluco, mas ao ler aparece direito :D

Tenta pode ser que de..

E uma das coisas que nunca andei a ver, quando comecei fizeram me assim, ficou sempre assim :)

Cumpz...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheOne

Pois, eu tenho UTF-8 na página e na BD, aparece tudo direitinho na BD os acentos e tudo. Na página também aparece tudo bem, só às vezes é que fica marado e é preciso fazer um carradão de refreshs....

Cumps

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheOne

Bom, já coloquei a BD como latin1_swedish e a página com ISO-8859-1.

Reforcei ainda com o header php a forçar charset ISO-8859-1 e a forçar o mySQL com o SET NAMES 'ISO-8859-1'.

Os dados aparecem bem tanto na BD como na página, só que às vezes aparecem mal na página e com uns refreshs consigo fazer com que fiquem bem. Mas isto era suposto funcionar sempre a 100%, o que é q estou a fazer mal aqui? Será que colocar o charset ISO-8859-1 no header do HTML e no header do PHP assim como fazer o SET NAMES para ISO-8859-1 faz tipo uma descodificação tripla dos dados e acaba por corrompe-los?

Ou terei de colocar o header PHP antes de qualquer código de leitura da base de dados? É que coloquei o header PHP no final do código php mesmo antes do html começar...

Mas continuo sem perceber porque é que o UTF-8 não dava...supostamente UTF-8 suporta todos os caracteres e mais alguns...

Obrigado pela ajuda pessoal,.

Cumps  :drunk:

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.