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

Acentuação PHP + Mysql

Discussão em 'Web Development' iniciada por DannyPt, 26 de Fevereiro de 2013. (Respostas: 19; Visualizações: 1851)

  1. DannyPt

    DannyPt Power Member

    Olá pessoal,

    É o seguinte, estou a testar uma BD em mysql...com uma tabela de contactos criada na mesma. Acontece que ao ver a tabela de dados no frontend, os nomes com acentos aparecem-me por exemplo S�rgio Alves em vez de Sérgio Alves.

    Tenho tudo em UTF-8 na tabela...e ate consegui contornar isto usando charset=ISO-8859-1 no notepad++

    Acontece que quando coloco charset=ISO-8859-1 no notepad++ são as informações do frontend que possuem acentos que ficam mal. Ou seja, em vez de aparecer "Ligação bem sucedida" como aparecia, aparece "Ligação bem sucedida". Contudo, os nomes da bd aparecem bem.

    Também já experimentei colocar echo utf8_encode("Ligação bem sucedida");

    Mas não deu...

    Quando uma coisa fica bem a outra fica mal...lol

    Realmente não estou mesmo a ver o que possa ser...alguém me dá umas luzes?



    Obrigado
     
  2. pimpaz

    pimpaz Power Member

    Que header/meta charset estás a usar?
     
  3. Experimenta meter isto logo nas 1ªas linhas, depois de <?php ...

    setlocale(LC_ALL, 'pt_PT');
    ou
    setlocale(LC_ALL, 'Portuguese_Portugal.1252');

    Garante que tens BD, e notepad++ em utf-8.

    Experimenta com <meta charset="utf-8"> no HTML

    Assim de repente, não me lembro de mais.
    Tive esse problema, mas foi por causa do TextWrangler, que não estava em ut-8...
     
    Última edição: 26 de Fevereiro de 2013
  4. DannyPt

    DannyPt Power Member

    Vou tentar fazer isso webmonkey. Tem de ser precisamente a seguir ao <?php ?

    Na meta tenho isto: <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

    Também já tentei colocar utf-8 na meta html e no notepad++ mas nada...

    Epah estou-me a passar com isto porque não sei o que experimente mais...sinceramente.

    A bd está toda em utf8_general_ci

    :\
     
  5. xpro

    xpro Power Member

    Quando tive esse problema optei por deixar o charset=ISO-8859-1 assim tudo o que vem da base de dados vem direito e substitui as mensagens predefinidas por Liga&ccedil;&atilde;o ... todos os caracteres especiais (~, ç e acentos) que pertencem a mensagens pre-definidas substitui por o código que lhe corresponde &atilde=ã ... Pelo menos assim nunca ,mais tive problemas com esse tipo de caracteres .
     
  6. DannyPt

    DannyPt Power Member

    Pois, se eu colocar a meta e o notepad++ em ISO-8859-1, tudo o que vem da BD vem correcto. Só os echos que estão no notepad++ é que não...

    Não percebi só o que tenho de substituir pelos ~ e ç. Podes explicar melhor?

    Obrigado :)
     
  7. Cfreitas

    Cfreitas Power Member

    Boas,

    Tens que configurar isso na ligação da base de dados.
    Corre isso depois de te ligares á BD.

    Cumps
     
  8. DannyPt

    DannyPt Power Member

    Coloco esse código dentro do <php ?
     
  9. xpro

    xpro Power Member

    POr exemplo onde tens ç substituis por &ccedil; onde tens ã pões &atilde; onexemplo informação fica informa&ccedil;&atilde;o onde tiveres "á" metes &aacute; por exeplo sábado fica s&aacute;bado...
    Nunca usei esse código que disseram secalhar até é mais fácil e rápido dessa maneira... Agora experimenta a que for mais fácil para ti.
    Cumprimentos
     
  10. _coelhinha_

    _coelhinha_ Power Member

    Boas,

    É simples, quando fazes insert's na BD utiliza o utf8_decode e quando vais buscar os dados à tabela utiliza o utf8_encode e vais ver que se acabam os problemas de acentos ;)
     
  11. DannyPt

    DannyPt Power Member

    Ok vou ver isso.

    Obrigado a todos :D
     
  12. DannyPt

    DannyPt Power Member

    Mas isso já eu fiz e não resultou :\
     
  13. _coelhinha_

    _coelhinha_ Power Member

    Tens o documento do html com o utf-8? é porque isso já me aconteceu, ter tudo ok do lado do php e depois faltar-me o cabeçalho no html a definir o encoding.
     
  14. barricas

    barricas Power Member

    Isto:

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    Como referido em baixo


     
  15. _coelhinha_

    _coelhinha_ Power Member

    Refiro-me a isto:

    <!DOCTYPE html>
    <head>
    <meta charset="UTF-8">
    </head>

    <body>

    <?php

    //codigo php aqui juntamente com o utf8_encode e utf8_decode

    ?>

    </body>

    </html>

    Neste caso o cabeçalho está mais simplificado por estar em html5
     
  16. Cfreitas

    Cfreitas Power Member

    sim. Logo a seguir à ligação à bd.
    O charset só vai definir que tens o HTML em UTF8. o que tranferes da BD tens que "declarar".
     
  17. DannyPt

    DannyPt Power Member

    Isso já tinha experimentado.

    Por exemplo: utf8_encode("Ligação bem sucedida");

    E não deu. Não coloquei foi o decode. Onde coloco?

    Também já experimentei o utf-8 na meta...fica o que está no código php bem e o que vem da bd fica mal...lol
     
  18. _coelhinha_

    _coelhinha_ Power Member

    Tens de usar o decode e o encode em simultâneo, ou seja, do que fazes decode, quando vais buscar tens de fazer encode

    Caso nada disto funcione pode ter haver com o encoding do teu servidor :)

    Por exemplo: INSERT INTO x (nome, morada) VALUES (" . utf8_decode($_POST['nome']) . ", " . utf8_decode($_POST['morada']) . ");

    No caso do decode há-de ser algo do género:

    $query = "SELECT nome FROM x";

    $result = mysql_query($query);

    while ($row = mysql_fetch_array($result)){
    echo utf8_encode($row['nome']);
    }

    Isto é um exemplo muito simples, tenta adaptar ao teu código. Já agora já viste o encoding do browser? (lembrei-me agora disso).
     
  19. DannyPt

    DannyPt Power Member

    Foi a primeira coisa que vi. Já coloquei em utf-8 e iso8589-1 :)

    Vou tentar as soluções que me deram.

    Obrigado
     
  20. DannyPt

    DannyPt Power Member

    Já consegui resolver...

    Retirei o UTF-8 da meta...coloquei UTF-8 sem bom nas configurações, e depois converti o documento para utf-8 sem bom no notepad++.

    Assim funcionou.
     

Partilhar esta Página