Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou desenvolvendo uma pequena Rede Social para comerciantes, mas estou com problemas na hora da exibição de textos.
As páginas PHP estão exibindo ERRO nos textos com acentuação, veja o exemplo do link abaixo:
https://www.lucroweb.net/Site/teste-1.php
Aqui o database MySQL não está configurado com a acentuação do HTML - Por isto a página PHP mesmo sendo UTF-8 apresenta erros.
Posso até alimentar o database com o código HTML correto, Mas quando as pessoas forem Postar seus Tópicos na Rede Social - As páginas PHP vão apresentar os textos tudo errado.
O que faço para evitar este PROBLEMÃO?
Agradeço ao Matheus pela dica.
No inicio da página já contém o seguinte meta:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Eu até consegui fazer o PHP apresentar os textos com acentuação correta do Português alterando os parâmetros do RecordSet:
De:
<?php echo $row_Servicos['servico']; ?>
Para
<?php echo htmlentities($row_Servicos['servico']); ?>
Mas seria melhor se eu digitasse apenas uma linha no código (por exemplo no meta) para não ter que ficar alterando cada parâmetro de RecordSet que eu tiver de inserir.
Alguém poderia me dar uma ideia sobre qual código inserir ou alterar?>
17 minutos atrás, Superwagtel disse:
Mas seria melhor se eu digitasse apenas uma linha no código (por exemplo no meta) para não ter que ficar alterando cada parâmetro de RecordSet que eu tiver de inserir.
O material que eu postei explica exatamente como fazer isso.
Esse problema é extremamente comum e temos centenas de tópicos a respeito aqui no fórum.
Sem seguir aqueles passos, você não vai conseguir escapar do htmlentities() ou utf8_encode() manualmente.
Mas algo muito estranho ocorreu, fiz dois testes, um com o meta UTF-8 e outro com o meta 8859-1
E o meta 8859-1 apresentou o database MySQL corretamente já o meta UTF-8 apresentou o texto do mesmo database MySQL tudo errado.
Meta UTF-8
https://www.lucroweb.net/Site/teste-4.php
meta 8859-1
https://www.lucroweb.net/Site/teste-5.php
Testei em todos os navegadores e funcionou deste mesmo geito, meu receito é que isto ocorra somente em minha máquina sendo que preciso entregar um projeto perfeito que não apresente erros no futuro.
Alguém pode me explicar por que isto ocorreu e principalmente se posso continuar meu projeto com o meta 8859-1 sem maiores receios?
Isso acontece pelo fato de que no seu banco ainda está como "caracteres latinos" / "iso-8859-1" e variantes, daí quando o navegador exibe, fica incompatível com o UTF-8 definido pelo seu código.
Você precisa verificar:
1 - Na definição do seu banco, tabelas, schemas, colunas, se alguma coisa não está definida com utf8, como "utf8_general_ci". Essa informação fica em collation.
2 - No momento de fazer sua conexão, você precisa definir para UTF8. Isso é importantíssimo. Nos links que eu passei existe essa informação para cada driver de conexão. No PDO por exemplo você pode fazer como nesse exemplo: https://forum.imasters.com.br/topic/563187-resolvido-sql-inject-quando-não-dar-para-impedir/?tab=comments#comment-2246837.
Mas eu não sei qual você está usando... Mysqli / PDO / Pgsql?
Poste apenas o trecho da sua conexão para darmos uma olhada nisso (tire informações de login/senha antes).
Olá @Superwagtel.
Você precisa definir o mesmo charset em todos os atores e participantes do sistema.
Isso significa definir:
1 - No arquivo em si (isso você faz na sua IDE).
2 - No banco de dados (no momento da conexão e nas definições de tabelas/schema/colunas).
3 - No seu html.
4 - Na sua resposta da requisição.
Tudo isso está abordado nesses materiais:
https://rubsphp.blogspot.com.br/2011/07/problemas-com-charset-nunca-mais.html
https://forum.imasters.com.br/topic/510576-erro-acentos-trocado-por-interrogação/