Jump to content
luisjs

UTF-8/WINDOWS-1252: estranho

Recommended Posts

luisjs

Tenho um site onde utilizo um ficheiro PHP em comum para desenhar o template. Nesse ficheiro (overall-code.php), declaro ao mesmo tempo o Charset da página.

require_once("/home/xxx/public_html/network/include/session.php");
header('Content-type: text/html; charset=utf-8');

function drawHeader(){ /*?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Site XXX</title>

etc... */

O que está dentro da função a /* e */ é o HTML. Há mais código, mas pus apenas o que interessa.

Dentro das restantes páginas que utilizam o template, a página é chamada da seguinte forma:

include("/home/xxx/public_html/beta_site/style/overall-code.php"); drawHeader();

Agora, o que me acontece, é que sempre que declaro esta página na index.php principal (que vai ficar http://www.xxx.net/xxx/index.php), os caracteres que aparecem nessa página ficam todos com um �, e no IE7 aparecem tipo quadradinho. O que é engraçado, é que noutras páginas que se localizam em sub-pastas, isto não acontece, ficando os caracteres normais, mesmo se não usar á ou assim.

Faço tipo um esquema, para se perceber melhor.

PASTA1

    PASTA2

        index.php (aparece bem)

        outro.php (aparece bem)

        PASTADENTRODAPASTA

            index.php (aparece bem)

    PASTA3

        blabla.php (aparece bem)

    index.php (aparece mal)

    outro.php (aparece mal)

Ainda mais engraçado, é que se usar o charset Windows-1252, esse esquema inverte-se, o que aparece bem passa a aparecer mal, e vice-versa.

Alguém me pode ajudar?

EDIT: Esqueci-me de referir. Qualquer valor que importe de uma tabela de MySQL, aparece também com os caracteres mal, mas isso em todas as páginas.

Share this post


Link to post
Share on other sites
djthyrax

Isso é porque estás a usar 2 charsets ao mesmo tempo. O que estás a fazer ali em cima com o utf-8 é apenas dizer "o output que se segue é utf-8", mas acabas por mandar cp1252 e utf-8 misturado. A solução passar por usares o utf8_decode() ou utf8_encode() consoante queiras usar utf-8 (recomendado) ou cp1252 (ou melhor, iso-8859-15).


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
luisjs

Quando eu uso utf-8, os caracteres de uma tabela MySQL ficam esquisitos também, assim como os valores da página inicial.

Já pus as tabelas e os seus campos em utf8, mas mesmo assim continuam mal. No entanto, algumas entradas que eu editei já com a página em utf-8 (um formulário que dá para editar os valores), esses já aparecem bem.

Tenho que editar todos os outros valores?

Share this post


Link to post
Share on other sites
fnds

Quando eu uso utf-8, os caracteres de uma tabela MySQL ficam esquisitos também, assim como os valores da página inicial.

Já pus as tabelas e os seus campos em utf8, mas mesmo assim continuam mal. No entanto, algumas entradas que eu editei já com a página em utf-8 (um formulário que dá para editar os valores), esses já aparecem bem.

Tenho que editar todos os outros valores?

Deixa-me ver se precebi, tu tinhas uma tabela mysql numa dada codificação de caracteres e mudaste-a para utf8? Se for assim tens de converter os dados que tens na tabela para utf8.

Share this post


Link to post
Share on other sites
luisjs

Como é que eu posso fazer isso de forma automática? Tenho que criar alguma página PHP com ligação ao servidor e com o utf8_encode em todos os valores?

É que sou um bocado n00b nisto  :wallbash:

BTW, tenho a base de dados toda em utf8_unicode_ci, e uso o phpMyAdmin (hosting da webHS).

Reformulei o meu sistema para usar menos variáveis e assim, e agora tenho dois ficheiros utilizados para o template em vez de um com as funções: overall-header e overall-footer (tal como no phpBB). No overall-header, tenho toda a estrutura <head>, e deixei apenas o <meta> que declara o charset, o header() do PHP não o estou a usar.

Share this post


Link to post
Share on other sites
fnds

Como é que eu posso fazer isso de forma automática? Tenho que criar alguma página PHP com ligação ao servidor e com o utf8_encode em todos os valores?

Eu fazia assim...

Share this post


Link to post
Share on other sites
zero-cool

Viva,

Por vezes isto resulta depois da ligação para a base de dados:

    mysql_query("SET CHARACTER SET utf8");
    mysql_query("SET NAMES utf8");

Abraço,

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

×
×
  • 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.