Jump to content


Photo

Briguinha Boba Com O Utf-8


  • Faça o login para participar
10 replies to this topic

#1 zegames

zegames

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado

Posted 14/08/2006, 00:28

Bem pessoal, gravo no banco de dados os textos com acentuação normal e o DB é LATIN.

"Exemplo de texto com acentuação isso é fácil de entender, a nação agradece a fé"

Agora na página uso o charset UTF-8 com a meta tag abaixo:

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

Ai que vem o problema, os textos ficam todos zuados como muitos devem saber.

Para resolver tal problema tenho usado a função utf8_encode para todos os textos enviados ao navegador. Funciona muito bem. Também já usei as opções htmlentities e soluções própias para passar a acentuação para código html.

Mas tirando as duas soluções propostas e testadas por mim, qual outra os experts da área recomendam?

Andei verificando o script WordPress e eles não usam a função utf8_encode, ai fiquei mais curioso ainda.

Bem, é isso espero que entedam.

Valeu

#2 Balala

Balala

    What you want for yourself?

  • Ex-Admins
  • 3357 posts
  • Sexo:Não informado
  • Localidade:Jaraguá do Sul - SC
  • Interesses:http://forum.wmonline.com.br/index.php?showtopic=5792

Posted 14/08/2006, 08:17

Acredito que não tenha outra saída, somente a codificação, nessa, você tem 3 alternativas:

1. Gravar os dados no banco já codificados, o que acredito ser a melhor, pois você codifica os dados apenas uma vez, não sobrecarregando o servidor com isso a cada acesso.

Ex:
$texto = utf8_encode($_POST["text]");
mysql_query("INSERT INTO tabela (texto) VALUES ('$texto')");

2. Codificar a string na própria consulta SQL

Ex:
SELECT CONVERT(texto USING utf8);

3. A maneira que você está utilizando.
Balala - Admin Geral Webfórum - Retired
Twitter
Stop Spreading Lies!
Posted Image

#3 zegames

zegames

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado

Posted 14/08/2006, 16:49

hmm... e é exatamente isso que o WordPress faz, já grava codificado no banco de dados.

valeu pelas informações, era mais ou menos isso que eu imaginava.

#4 jfsso

jfsso

    12 Horas

  • Usuários
  • 145 posts
  • Sexo:Não informado
  • Localidade:Tsukuba
  • Interesses:JAVA - PHP - RUBY - PERL - PYTHON - MYSQL

Posted 14/08/2006, 22:54

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

Ai que vem o problema, os textos ficam todos zuados como muitos devem saber.


Isso pode ser resolvido se voce realmente mudar o charset do seu codigo para UTF-8. So adicionando um meta o charset nao vira unicode.
João

#5 zegames

zegames

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado

Posted 14/08/2006, 23:37

Sim, todas as minhas páginas eu salvo com o charset UTF-8 sem o chato BOM (no meu editor). Mas agora em páginas dinâmicas usando sistema de templates o output não sei se teria algo especial para 'encodar'.

Continue com seu pensamento jfsso e desdobre sua idéia para o conhecimento de todos.

#6 jfsso

jfsso

    12 Horas

  • Usuários
  • 145 posts
  • Sexo:Não informado
  • Localidade:Tsukuba
  • Interesses:JAVA - PHP - RUBY - PERL - PYTHON - MYSQL

Posted 15/08/2006, 02:15

Aqui vai o resultado do teste que fiz agora:

tabela com o collation: latin1_swedish_ci

php com o charset: utf8

Ate' aqui sem erros se eu insiro dados no mysql pelo script. :-) Porem se inserir dados direto no db usando latin1_swedish_ci ele nao mostra os codigos corretamente. Resolvido trocando o collation para utf8_unicode_ci.

Trocando o charset do php para iso8859-1 e lendo os dados que foram gravados em utf8 da erro na hora mostrar. Gravando por este script e mostrando nao da problemas. Trocando o collation do mysql consegui fazer tudo mostrar legal.

Pra diminuir um pouco mais os problemas (coreano e chines nao mostram direito), resolvi adicionar mais coisas no php...
mb_internal_encoding("UTF-8");
mb_http_output("UTF-8");
ob_start("mb_output_handler");

Pronto, agora seja o que for, ele sempre vai mandar o output em utf-8. Deu pra usar ate' coreano e chines sem problemas. So que mudando o charset do script para iso8859-1 ele parou de funcionar.
João

#7 Allisson

Allisson

    12 Horas

  • Usuários
  • 239 posts
  • Sexo:Masculino
  • Localidade:Alagoas
  • Interesses:PHP

Posted 15/08/2006, 03:30

Simples cara a pouco tempo estava com este problema também mas a solução esta aqui ó:

subistitui essa meta : <meta http-equiv="Content-Type" content="application/text/html; charset=utf-8" />



por essa: <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

vlw abraços qualquer duvidas postae!
Allisson Rafael de Brito Araujo

Devagar e sempre. Se Deus é por nós, quem será contra nós?

#8 zegames

zegames

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado

Posted 15/08/2006, 03:48

sem comentários para seu post Allisson, totalmente por fora.

jfsso, achei interessante estas funções:

//mb_internal_encoding("UTF-8");
mb_http_output("UTF-8");
ob_start("mb_output_handler");

Em outras palavras, quer dizer que dispensa o uso da função utf8_encode() que eu tenho usado nas strings. É isso mesmo?

Testei estas funções colocando-as no topo do meu .php e funcionou lindamente. Coloquei no local correto?

Um detalhe interessante que achei nestas funções é que variar o charset das páginas fica fácil, basta ocultar ou não estas funções. E isso mantendo meu db em Latin.

obs: repara no comentário da primeira função, se usar a função ele come meus acentos.

Abraço e valeu pelo esclarecimento

Edição feita por: zegames, 15/08/2006, 03:56.


#9 Allisson

Allisson

    12 Horas

  • Usuários
  • 239 posts
  • Sexo:Masculino
  • Localidade:Alagoas
  • Interesses:PHP

Posted 15/08/2006, 03:59

bom velho amigo zegames nao sei se eh o sono ou algo parecido mas ... o que vale é a intenção tentei te ajudar ;) falopa! (y)
Allisson Rafael de Brito Araujo

Devagar e sempre. Se Deus é por nós, quem será contra nós?

#10 zegames

zegames

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado

Posted 15/08/2006, 04:45

Valeu pela intenção Allisson.

Fiz mais testes intensivos aqui e volto atrás em minhas palavras..

Se eu uso as funções abaixo:

mb_internal_encoding("UTF-8");
mb_http_output("UTF-8");
ob_start("mb_output_handler");

Os textos acentuados vindo do banco de dados funcionam bem, mas se eu tiver outros textos acentuados no template ai volta a zuar.

Agora se eu oculto as funções mb ai preciso usar a fução utf8_encode() nas strings vindas do db.

Eu tenho um blog baseado no WordPress e por curiosidade mudei o charset de UTF-8 para ISO-8859-1 e todos os posts anteriores ficaram com o texto zuado. Olhei no banco de dados e o db é Latin, mas os textos aparentemente estão encodados em utf-8. A palavra 'coleção' por exemplo está como 'coleção' no db.

O negócio é projetar seu sistema para um charset só e ponto final. Nem o WordPress tem uma solução mágica para o usuário mudar o charset a qualquer momento e não ter problemas com o texto então nem vou esquentar a cabeça.

Vou continuar usando a função utf8_encode() nas strings.

Mas eu vou ser sincero... ainda não estou satisfeito com esse assunto :[

#11 jfsso

jfsso

    12 Horas

  • Usuários
  • 145 posts
  • Sexo:Não informado
  • Localidade:Tsukuba
  • Interesses:JAVA - PHP - RUBY - PERL - PYTHON - MYSQL

Posted 16/08/2006, 11:05

Se mudar o charset da pagina para um diferente dos dados, voce tera que usar funcoes do mysql para receber os resultados com o mesmo charset da pagina. :-) E' bom deixar tudo com o mesmo charset quando esta desenvolvendo algum script.
João




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq