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

luisjs

UTF-8/WINDOWS-1252: estranho

8 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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,

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