Jump to content

Problema com includes e charsets


jfosorio
 Share

Recommended Posts

Viva!

Estou com o seguinte problema:

Tenho uma página com o charset definido como iso-8859-1 no head. Nesta mesma página faço o include de um documento php onde estão algumas variáveis (maioritariamente expressões regulares). O problema surge quando imprimo as variáveis, pois os caracteres especiais ficam todos "marados".

Por exemplo, o conteúdo de uma das variáveis é:

/^([A-Za-záÁàÀãÃâÂéÉèÈêÊíÍìÌóÓòÒõÕôÔçÇ]{2,})([ ])([A-Za-záÁàÀãÃâÂéÉèÈêÊíÍìÌóÓòÒõÕôÔçÇ ]{2,})$/

.. mas está a imprimir:

/^([A-Za-záÃà ÀãÃâÂéÉèÈêÊíÃìÌóÓòÒõÕôÔçÇ]{2,})([ ])([A-Za-záÃà ÀãÃâÂéÉèÈêÊíÃìÌóÓòÒõÕôÔçÇ ]{2,})$/

Já estou farto de googlar e já experimentei montes de coisas que fui encontrando, mas nada surtiu efeito. Por exemplo, experimentei colocar no doc php onde tenho as variáveis, o header para definir o charset como utf-8 ou iso-8859-1, mas nada resolve o problema.

Alguém tem alguma sugestão para resolver esta questão? Desde já obrigado!

CSS 3D Text - Partilha mensagens em 3D com os teus amigos no Facebook!

Portal de Informática it4life - Emprego, notícias, fórum, comunidade.

Link to comment
Share on other sites

Biba,

Vou-te responder o que me responderam quando me deparei com esse mesmo problema num site para vários idiomas:

Põe tudo em utf-8. Base de dados, tabelas, charset da página, a codificação do próprio ficheiro....tudo.

Não terás qualquer problema...a não ser que no meu caso, desconhecendo a origem, já que fiz isto tudo, ainda precisei de acrescentar ao ficheiro que fazia a ligação à base de dados: mysql_query("set names utf8");

No entanto como so foi uma linha e que executa sempre, deixou-me dormir descansado.

Abraços e beijinhos,Rui Costa

Link to comment
Share on other sites

Bom dia,

Rui, obrigado pela resposta.

Já detectei qual o problema. Que estupidez da minha parte. Quando um gajo está cansado da cabeça, chega a um ponto que já nem sabe o que está a fazer...

Eu também já tinha experimentado pôr tudo com UTF-8 e não estava a resolver o problema. E porquê?! Porque eu, com toda a minha genialidade, chegava à Base de Dados e alterava o collation para ut8_general_ci., mas depois não mudava os campos das tabelas já criadas, por isso o que já estava definido com latin_swedish_ci continuava inalterado e o problema mantinha-se. :wallbash:

Bem, agora já está tudo a rolar, e até agora não tive problemas.

A dica do mysql_query("set names utf8"); parece interessante, mas até agora não foi preciso. de qualquer das formas fica sempre a referência para o caso de vir a ser necessário.

Obrigado e cumprimentos!

CSS 3D Text - Partilha mensagens em 3D com os teus amigos no Facebook!

Portal de Informática it4life - Emprego, notícias, fórum, comunidade.

Link to comment
Share on other sites

Corrijo o que disse anteriormente: de facto é mesmo necessário colocar a instrução mysql_query("set names utf8); senão os dados são armazenados com caracteres esquisitos...

Mais uma vez, obrigado pela dica!

CSS 3D Text - Partilha mensagens em 3D com os teus amigos no Facebook!

Portal de Informática it4life - Emprego, notícias, fórum, comunidade.

Link to comment
Share on other sites

Bom dia,

Estou com um problema semelhante, tenho a BD, tabelas, codificação atribuída ao charset do content-type e ficheiro guardado tudo em UTF-8 no entanto fazendo uma consulta à BD os nomes como por exemplo, Luís (com assento no i), o i é substituído por ?.

Se mudar o charset do content-type para ISO 8859-1 o nome aparece correcto mas o restante obviamente fica "desfigurado".

Alguma dica para resolver isto?

Obrigado.

"bater código"

Link to comment
Share on other sites

Para resolver a mistura de codificação à que tentar perceber a codificação de cada um destes items:

  • codificação do campo na base de dados
  • codificação da ligação à base de dados
  • codificação do ficheiro que contem strings de output, neste caso php
  • se usar templates, codificação do ficheiro template
  • codificação nos headers da resposta do servidor
  • se a resposta for um documento html, codificação explicita na tag <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Portanto, as coisas podem falhar em vários níveis... espero não me ter esquecido de nenhum  😉

Link to comment
Share on other sites

Para resolver a mistura de codificação à que tentar perceber a codificação de cada um destes items:

  • codificação do campo na base de dados
  • codificação da ligação à base de dados
  • codificação do ficheiro que contem strings de output, neste caso php
  • se usar templates, codificação do ficheiro template
  • codificação nos headers da resposta do servidor
  • se a resposta for um documento html, codificação explicita na tag <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Portanto, as coisas podem falhar em vários níveis... espero não me ter esquecido de nenhum  😉

Já resolvi, o problema estava na codificação na ligação à base de dados, incluí mysql_query("set names utf8") mas no sítio errado, estava antes de abrir a base de dados.  ?

Para referência deve então, ser colocado depois de abrir a BD.

Obrigado!

"bater código"

Link to comment
Share on other sites

Sim, o set names depois da ligação à base de dados, se não nunca pode funcionar.

Quando tive este problema foi para um site que além dos idiomas "latinos" estava traduzido em chinês simplificado, árabe, russo e outro que já não me lembro... o antigo programador como não sabia o que fazer quando criou esse site pela 1ª vez, tinha para cada idioma, uma pasta com o clone do site...já estão a imaginar a manutenção daquilo....

Abraços e beijinhos,Rui Costa

Link to comment
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
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.