1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Caracteres portugueses

Discussão em 'Web Development' iniciada por ams33, 4 de Outubro de 2007. (Respostas: 20; Visualizações: 5395)

  1. Olá,
    Sou novo nisto e estou a tentar criar um site.
    No meu pc com Windows XP, instalei o servidor Apache + MySQL (v5.0.45) + PHP (v5.2.3).
    Estou a usar o Dreamweaver 8.
    Tenho aprendido, utilizando a velha técnica de ler manuais e experimentar :-D
    Só que tenho alguns problemas que não sei como ultrapassar.
    Descobri agora este forum e a impressão que fiquei é muito positiva, pois já li rápidamente as 5 primeiras páginas deste fórum e para cada dúvida, há sempre pelo menos, uma alma valiosa que dá uma dica para ultrapassr o problema.

    O problema que estou a ter é o seguinte:
    1) criar uma base de dados e um conjunto de tabelas no mysql;
    2) inseri alguns registos em algumas tabelas;
    3) quando faço interactivamente no MySql um select * from <tabela> os dados que visualizo são os que introduzi (por ex. se num campo de texto inseri "realização", ao visualizar o resultado do select, vejo "realização");
    4) no Dreamweave, ao criar uma página dinâmica PHP, os caracteres portugueses ç e ã (ou quaiquer outros) aparecem substituidos por caracteres gráficos
    Já experimentei alterar as collation, mas não consigo. O mais esquisito é que no MySQl o texto aparece correcto, logo dá ideia que é um problema na ligação entre o mysql e o Dreaamweaver/PHP

    Aguém me pode ajudar?
    Muito obrigado
     
  2. CoolMaster

    CoolMaster Power Member

    A minha resposta pode parecer inutil mas a verdade é que editores HTML mais PHP não da boa coisa! Logo a minha solução é não usares dreamweaver porque nem sequer precisas disso.
     
  3. Pois, mas isso não me resolve o problema.
    Se houver alguém que me possa resolver o problema, sem que a solução seja tão radical ...
    Obrigado
     
  4. eyeliner

    eyeliner Power Member

    Tenta isto:
    Tenta meter isso em UTF8.
     
  5. Tuaregue

    Tuaregue Power Member

  6. Obrigado eyeliner.
    Apesar de não ter resolvido ("Modify > Page Properties > Title/encoding" está com "Europa Ocidental" e Edit > Preferences > Fonts" está tb com "Europa Ocidental", pelo menos já eliminei possibilidades. Portanto é de certeza no interface entre o MySql e o Dreamweaver 8. Vou ver o que consigo descobrir no MySql em termos de envio de dados. E tb vou experimentar mudar para UTF8.

    Obrigado Tuaregue.
    Embora o objectivo é o utilizador introduzir o texto que quiser (sem ter de pensar em cód. ascii) na column da tabela e ser visualizável na página Web.

    Depois informarei dos resultados das experiencias que vou fazer.
    Obrigado a todos mais uma vez.
    E se alguém souber da "fórmula mágica/receita" :-D (ou mesmo algum palpite), então, por favor diga-me.
     
  7. cmmr

    cmmr [email protected] Member

    Boas!

    Isso acontece porque a página onde inseres está com uma codificação diferente da página onde visualizas.

    Experimenta utilizar a mesma codificação dos dois lados.

    Cumprimentos
     
  8. CMPT

    CMPT Power Member

    boas

    ja esperimentas te alterar o teu php.ini?

    procura isto:
    ;default_charset = "iso-8859-1"

    e mete isto:
    default_charset = "iso-8859-1"

    e so retirar o ";" ;)

    ja passei por essa esperiencia e acho que o mysql guarda automaticamente na base de dados os caracteres especiais em codigo ascii.
     
    Última edição: 6 de Outubro de 2007
  9. s00n

    s00n Power Member

    Tenho andado com uns problemas de encoding que dantes acho que não tinha.
    Há muitas coisas em questão:
    • Caracteres especiais
    • Encoding do texto
    • Encoding dos ficheiros
    • Encoding (collation) na base de dados MySQL
    Já fiz dezenas de experiências com encondings de um lado e do outro e ultimamente tenho lido muita coisa sobre encoding, principalmente para Web.

    Na verdade não encontrei nenhum sítio onde encontrasse a solução.

    Pelo que li, seria bom ter tudo em UTF-8 Unicode. No entanto várias coisas acontecem.
    Metendo o encode do ficheiro *.php em UTF-8, metendo metadata no HTML com encoding em UTF-8, mudando ainda os headers do PHP, também, para UTF-8 e a collation da tabela na base de dados MySQL em UTF-8, simplesmente não funciona.

    Ao entrarmos pelo phpMyAdmin, e fazendo um select nos dados inseridos via form com accpt-charset em UTF-8, aparecem símbolos em vez de certos caracteres. No entanto, ao ler, da mesma base de dados, directamente para o site php, cujo ficheiro está em UTF-8 e os headers também, os caracteres aparecem como os inseridos, portanto, bem. No entanto, no início da página aparecem caracteres vindos não sei de onde.

    ""

    Copiei-os aqui mas não sei se aparecem bem dependendo do encode do fórum.

    De qualquer maneira, estou a trabalhar em localhost no meu PC. Quando submeto para o servidor onde tenho o site online, a session_start() do PHP simplesmente não funciona porque esses caracteres já foram enviados nos headers e portanto não pode arrancar. Isto porque não se pode fazer qualquer tipo de output antes de mexer na session ou nos headers.

    Uma coisa engraçada e que não sei bem explicar é que neste caso, tendo tudo em UTF-8, se converter o encoding do ficheiro *.php em ANSI, esses caracteres iniciais desaparecem!

    Sei que há outros standards de encoding como o iso-8859-1.

    Algúem com experiência em encodings me sabe resolver o problema? Gostava de ter tudo em UTF-8 mas que não me apareçam caracteres antes e que na base de dados, com o phpMyAdmin e no site, os caracteres sejam os mesmos, e os mesmos que eu inseri nas forms via website.

    Cumprimentos,
     
  10. K0mA

    K0mA Power Member

    Boas,

    Usa o iso-8859-1.
    mete <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> dentro da secção head da página.
     
  11. Armadillo

    Armadillo Folding Member

    experimenta isto
    Código:
    [COLOR=#0000ff]echo htmlspecialchars[/COLOR][COLOR=#009900]([/COLOR][COLOR=#ff0000]$tuaString[/COLOR][COLOR=#009900]);
    [/COLOR]
     
  12. s00n

    s00n Power Member

    E em relação ao encoding do source file? UTF-8? E na base de dados a collation? E porquê iso-8859-1 e não UTF-8?

    EDIT:

    Com iso-8859-1 no meta e com o ficheiro em UTF-8 continuo com caracteres esquesitos.
     
  13. shello

    shello Moderador
    Staff Member

    A usares codificações diferentes é que não vais lá ;)

    Se o ficheiro está em UTF-8, então no meta também tens de dizer que é UTF-8. Da mesma forma para iso-8859-1 (eu aconselhava o iso-8859-15 em vez do *-1, porque este já tem o "€").
     
  14. s00n

    s00n Power Member

    Acho que já percebi aqui a jogada.
    Não... isso não tem nada a ver uma coisa com outra.
    O encoding do ficheiro é uma coisa. Indica o formato dos caracteres do código fonte. O encoding do HTML indica o formato dos caracteres a serem mostrados no output, porventura, num browser.

    Já meti todos os files encodings em ANSI e os headers do output HTML em utf-8 e já me mostra tudo bem e sem lixo antes [devido ao encoding do source file em utf-8 que deve ter um código de "new line" que gera para lá confusão e mostra uns caracteres manhosos).

    De qualquer maneira, eu tinha alguns problemas era ao submeter forms via AJAX, o que aparecia na base de dados não estava bem e encontrei aqui outra thread vizinha em que explicam bem como resolver e passo a explicar:

    usar 'encodeURIComponent(str);' nas variáveis a enviar em GET ou POST, e depois, no server-side, no meu caso com PHP, usar 'utf8_decode(str)'. Por exemplo:

    $title = utf8_decode($_POST['title']);

    E portanto, ao fazer o insert desta variável na base de dados, fica visível com os caracteres correctos.

    Depois, ao fazer um select deste campo inserido, tem de se inverter o esquema fazendo, após o select e de ter a variável $title:

    echo 'utf8_encode($title)';
     
    Última edição: 20 de Março de 2008
  15. K0mA

    K0mA Power Member

    Acho que já percebeste...
    Agora só não faz sentido é esse esquema todo do encode e do decode (por ser desnecessário), mete o ficheiro em ansi e depois metes a meta iso-8859-1.
     
  16. s00n

    s00n Power Member

    Mas estou a fazer um site em que vai envolver muitos países e muitas línguas a postarem cenas e preciso de um encoding que os abranja todos. O ISO-8859-1 safa-me?
     
  17. K0mA

    K0mA Power Member

    aqui.
    Eu recomendei ISO-8859-1 (Europa ocidental) visto o título do tópico ser "Caracteres portugueses"
     
  18. s00n

    s00n Power Member

    E que collation recomendas para a base de dados?
    Estava em utf-8_bin. E já agora ao submeter nas forms meto algum encoding? Eu meti:

    <form accept-charset="iso-8859-1" action="" method="POST">

    Mas estou com uns problemas quando insiro e depois vou ler. Os caracteres não ficam bem. No entanto, se usar encode_utf antes de inserir e na base de dados tiver utf-8_bin fica bem. Mas queria ter os charsets iguais em todo o lado. Eu penso que originalmente ele metia-me a collation da base de dados em latin1_swidish, uma coisa do género.

    EDIT:

    fiz agora um teste e, adicionando utf_decode às variáveis que vêm por POST, $_POST['var'], e só depois inserindo na base de dados, fico com tudo bem quer na base de dados, quer no site depois ao fazer select. Wierd...
     
    Última edição: 20 de Março de 2008
  19. K0mA

    K0mA Power Member

    Retira <form accept-charset="iso-8859-1" action="" method="POST"> e deixa só <form action="" method="POST"> depois faz sem os encodes e os decodes.
    Deu bem?

    A collation deixa estar a standard que serve para o Português e muitas outras.
     
    Última edição: 20 de Março de 2008
  20. s00n

    s00n Power Member

    Estive a ler sobre o utf_decode e encode do PHP e lá lembrava que o Javascript utiliza UTF-8, daí, quando envio coisas via AJAX, o gajo precise do utf_decode para sacar o que lá está para iso-8859-1 e depois funcionar.

    Eu penso que isto na form não implica com nada, apenas permite receber mais tipos de chars. Mas agora já está tudo bem. E já percebi como isto funca tudo. Big tnx.
     

Partilhar esta Página