• Cadastro
  • Fóruns
  • Manual
  • Projetos
  • Seminário
  • Tradução
  • Tutoriais
Início

Treinamento Drupal 31 de Janeiro em São Paulo

Pesquisa

Google

Itens ativos

  • Aplicação que grava informações em um banco de dados
  • Upload de imagens em massa
  • Treinamento Drupal
  • Foto do usuário no topo do blog
  • Tamanho do backup do banco de dados
  • Site fora do ar Personalizado
  • É possível fazer isso com o Drupal?
  • Erro de e-mails no Drupal Brasil
  • Formulario personalizado
  • Views e rss
mais

Posts mais lidos hoje

  • Foto do usuário no topo do blog
  • Upload de imagens em massa
  • ajuda instalar
  • Treinamento Drupal
  • Onde hospedar site com Drupal?
  • Site fora do ar Personalizado
  • Videos
  • Views e rss
  • Download do Drupal Corrompido
  • Comunix

Login do usuário

  • Criar uma conta
  • Recuperar senha

Parceiros

Assine o RSS do Drupal-BR

RSS dos itens mais ativos

RSS do conteúdo

RSS dos comentários

Início » Fórum » Suporte

Problemas com UTF-8

Boa tarde pessoal,

Mantenho um Banco de dados com o drupal 4.6 e na hora de fazer update para 4.7, os acentos de todos textos do meu banco ficaram loucos.

Meu banco está em utf-8 rodando no drupal 4.6, mas estranhamente a acentuação dos mesmos caracteres ficam doidos após o udpate pro drupal 4.7.

Por favor se alguém que conheçe bem o MYSQL e PHP MY ADMIN poder me ajudar ficaria feliz.
Desde já agradeço,

Carlos

‹ Gráficos e diagramas interativos no Drupal
Enviado por musashisama em 26/06/2006 - 22:50
  • Suporte
  • Se logue ou se registre para poder enviar comentários
  • 984 leituras
Em 27/06/2006 - 16:39 RafaelSilva disse:

Olá Carlos,

Esse erro é meio estranho. Há algum tempo li alguma coisa no Drupal.org sobre algo parecido.
Você tentou criar um novo site com o Drupal 4.7 usando um banco novo e testar para ver se ele funciona os acentos?
Talvez seja uma tentativa válida.

Abraços,

--
Rafael Ferreira Silva
http://www.rafaelsilva.net

  • Se logue ou se registre para poder enviar comentários
Em 28/06/2006 - 02:24 musashisama disse:

Fala Rafael =]

Já sim =\ Criei um novo banco do zero e rodando nele drupal 4.7 os acentos tao beleza.
Mas na hora de updatear meu antigo banco do 4.6 pro 4.7, os acentos ficam bugados =\

E no servidor ta tudo ok (rodando php5, mysql 5, ohpmyadmin mais recente) e o update pro drupal 4.7 fiz todos os processos (exportei o banco com os modulos extras desabilitados, usando o tema padrao e rodando no server o 'updte.php')

Tipo dando uma olhada nas colunas do banco de dados do 4.6, reparei q ta assim um texto por exemplo:
"O que você está achando do nosso site?"
E na hora da exibicçaõ na tela ao visitar o site em si, este texto apareçe normal: "O que vocês está achando do nosso site?"

Eh muito estranho mesmo. A colation e charset q uso no drupal 4.6 sao utf8 e roda os acentos legal. Antes rodava "latin1" e nao sei como mudou pra utf8 nem percebi. To voando =\

  • Se logue ou se registre para poder enviar comentários
Em 29/06/2006 - 18:24 RafaelSilva disse:

Olá Carlos,

No meu site eu precisei migrar os dados que estavam no b2evolution para o Drupal. No processo de migração, eu tive o mesmo erro. Lendo na documentação do Drupal, eu vi que eles agora forçam o utf-8 para banco de dados.
O meu banco de dados é mysql 4.0 e portanto não tem encoding para os dados, mas não sei porque eles não tavam indo certo(afinal eu estava migrando tudo para o mesmo SGBD em bancos diferentes).
No fim, eu tive que usar a função mb_convert_encoding(http://br2.php.net/mb_convert_encoding) para converter. Para usar essa função é necessário a extensão Multibyte String junto com seu PHP.

Talvez, e só talvez, se vc gerar um export via phpmyadmin, e fizer um script php que converte o conteúdo desse arquivo usando essa função talvez funcione.

Uma outra opção seria investigar o módulo de update do Drupal... mas aí eu não sei exatamente o que procurar.

No meu caso eu usei a seguinte linha de código para mudar os encodings:

$q = mb_convert_encoding($q, "UTF-8", "ISO-8859-1");

onde $q é a variável com as linhas que estavam com problema.

Não sei se isso ajuda, mas pode ser um caminho a se seguir.

Abraços,

--
Rafael Ferreira Silva
http://www.rafaelsilva.net

  • Se logue ou se registre para poder enviar comentários
Em 29/06/2006 - 20:15 Cláudio disse:

Carlos:

Tive um problema semelhante para operacionalizar meus backups. Meu provedor de presença disponibiliza MySQL 4.0.
O drupal 4.6 (e o drupal 4.7 também) usa os caracteres em UTF-8. Mesmo que seu banco de dados esteja configurado de forma diferente, o drupal força UTF-8. Esta codificação é multibyte, e os caracteres acentuados usam 2 bytes. O resultado é que quando você usa uma ferramenta que faz a apresentação em outro código (por exemplo, iso8859-1), os caracteres acentuados são 'expandidos' para os dois caracteres da outra codificação. Na hora de voltar com os dados para o banco de dados . . .
Resolvi meu problema de backup usando o programa recode do linux (no meu debian kurumin, apt-get install recode), usando a linha de comando:

<strong>recode latin1..utf8 arquivo.sql</strong>

Ou detalhando melhor:

  1. Fazer backup usando o phpMyAdmin, gerando um arquivo sql. Notar que os caracteres acentuados estarão 'expandidos', por exemplo, ã vai aparecer como ã.
  2. No arquivo de backup gerado, usar o recode, da forma mostrada acima. Se você abrir o arquivo sql, deve notar que os caracteres foram corrigidos, e você deve ver os acentos corretos.
  3. Este arquivo corrigido você pode 'devolver' ao banco de dados usando o phpMyAdmin.

Referências:

  1. Ver http://www.marblestation.com/blog/index.php?p=149. É uma descrição de problema similar, mas de um site em espanhol.
  2. No site do drupal, existe o seguinte post. Lacônico, mas se refere a este problema: http://drupal.org/node/8408. Veja o comentário sobre o uso de outras codificações (encodings).
  3. Postei o meu problema aqui na época. Veja em http://drupal-br.org/node/275 - ops, vi seu comentário lá.

Ach que o procedimento deve servir para você também. Usando o phpMyAdmin, exporte seu banco, converta os dados, e leve de volta.
Experimente também o parâmetro AddDefaultCharset UTF-8 no arquivo .htaccess.

Espero que ajude.

--
Cláudio

--
Cláudio

  • Se logue ou se registre para poder enviar comentários
Em 30/06/2006 - 23:58 musashisama disse:

Oi pessoal,

Poxa antes de tudo quero dizer q fico muito contente e felicíssimo pela cooperação dos membros desta comunidade. Esse espírito de participação onde cada um dedica um pouquinho do seu tempo, muitas vezes precioso e escasso, para ajudar e debater com os demais companheiros. Quero também continuar cada vez mais participando do drupal brasil =]

Mas uma notícia má =\

Instalei o "recode" em minha máquina (Rodando Linux ubuntu). Fiz as etapas descritas pelo nosso amigo Cláudio certinho, exportando o banco pra .sql e dando o comando recode pra passar de latin1 para utf8. Mas infelizmente os caracteres ainda continuaram bugados =\

Não entendo o que aconteçe com esse meu banco. O pior é que agora surgiu outra dúvida. Se não deu certo o procedimento acima, em q charset está meu banco? Está já em UTF-8? E se sim pq será q na hora do update pro drupal 4.7 buga tudo ? =\

E o mais curioso é q apesar de bugado as colunas das tabelas do banco na hora de visualizar no próprio PHP MY ADMIN, na visualização do site dentro do drupal 4.6 fica tudo bonitinho sem bugs.

Caso alguém queira ajudar este atrapalhado aqui, dando uma olhada no BD, eu ficaria muito feliz pelo menos para descobrirmos qual é o problema, assim partiria para uma busca de solução mais eficaz do meu problema nos fóruns.

O site é esse -> http://www.larc4ever.com/ (rodando em drupal 4.6)

O banco de dados (.sql) do site zipado -> http://carlos.designlivre.org/bdcarlos.zip

Um grande abraço pessoal

  • Se logue ou se registre para poder enviar comentários
Em 01/07/2006 - 11:04 RafaelSilva disse:

Olá Carlos,

Fico feliz em saber que o Drupal Brasil está podendo ajudar as pessoas. Essa é a intenção :-)

Uma coisa: esse banco que vc mandou é o dump direto do phpmyadmin ou vc já rodou o recode nele?
Pergunto isso pq nele as strings já estão quebradas... se isso já vir do phpmyadmin assim, talvez seja um problema na exportação... isso é só um chute, mas acho que vale olhar por esse lado.

Abraço.

--
Rafael Ferreira Silva
http://www.rafaelsilva.net

  • Se logue ou se registre para poder enviar comentários
Em 01/07/2006 - 23:14 musashisama disse:

Olá Rafael,

O link q aponta o banco de dados acima ta do jeito q ta rodando no drupal 4.6 no ar.
Nao rodei o recode nele não. Claro, rodei aki em casa numa cópia desse banco, mas este q ta no ar ta do jeito q nasceu, ja bugado.

Como assim erro na exportação? Se ele ja apresenta esse bugamento online, ele exporta do jeito q o banco tá exato? Ou tem como mandar o php my admin exportar corrijidamente?

Me explica melhor. Abraços =]

  • Se logue ou se registre para poder enviar comentários
Em 02/07/2006 - 20:11 Cláudio disse:

Carlos:

Meus últimos 2 centavos -estou sem munição.
Tentei uma dúzia de charsets com seu bd, sem sucesso. Pesquisei um pouco na net, e fiquei com a impressão de que descobrir a codificação de um arquivo não é um processo trivial - envolve analisar o conteúdo do arquivo, e tal. Reduzi seu banco a algumas linhas, e rodando o script (recode utf8..latin1 carlos.sql) DUAS vezes corrigiu alguns caracteres. Mas dá erro em vários outros . . . mapas diferentes? Ver mais abaixo.

Idéias para resolver seu problema:

  1. A rápida: usando um editor de texto, ou comandos sql pela interface do phpMyAdmin, identifique os strings que correnpondem a caracteres acentuados, e faça a substituição. Tome cuidado para primeiro substituir as sequências (çã, çõ). Colei um scrip sql que montei no fim deste post, pode usar como referência - ele trabalha com um bd convertido para drupal 4.7, e o phpMyAdmin que usei estava 'travado' em iso8859-1, e só resolvi o meu problema - só tem os caracteres que eu tinha. Repare que ainda assim você vai ter que fazer uma conferência manual, pois se houver um à válido no seu bd, ele será substituído por í. É uma solução 'suja', mas resolve seu problema de conversão. Talvez você tenha outras tabelas afetadas, vai ter que converter também. As minhas eram só essas, meu sistema é pequeno.
  2. A limpa. Entender o que está acontecendo especificamente no seu sistema. Olhei seu arquivo em dois sistemas, um linux, outro Windows. Os dois me mostraram, conteúdos diferentes. Você gerou seu arquivo zip direto pelo phpMyAdmin, ou baixou um arquivo texto e depois 'zipou' com outra ferramenta, como pkzip ou zip? No segundo caso, você pode ter 'convertido' mapas de caracteres duas vezes: uma pelo phpMyAdmin, outra no computador aonde fez a conversão texto -> zip.
  3. Seus caracteres estão estranhos, parece que cada caracter especial está usando 4 bytes, sinal de que ou não está usando utf8, ou de alguma forma, os caracteres acentuados foram expandidos duas vezes. Apenas meu chute.

  4. Apenas para sua referência: Olhe como está a página inicial do meu phpMyAdmin. Repare que ele seleciona o mapa de caracteres da conexão (lang). O collation não é relevante, ele apenas especifica como vão ser ordenados os caracteres
    phpmyadmin/index.php?lang=ptbr-utf-8&server=1&collation_connection=utf8_bin
    Como está a sua? Você consegue mudar a seleção?
  5. Por fim, acho estranho que você, com o servidor usando MySQL 5.0, com suporte pleno a utf8, tenha problemas. Meu provedor de presença usa o MySQL 4.0, que não suporta múltiplos sets de caracteres - mas o MySQL 5 deveria lidar com isso de forma mais transparente. Se o seu sistema de teste em casa for diferente do seu provedor de presença, tome cuidado ao transportar dados de um para o outro - pode gerar problemas. Faça o transporte da mesma forma que dois porcos-espinho fazem sexo - com muito cuidado.

script sql:

UPDATE node_revisions SET
   title = REPLACE (title, 'ú', 'ú'),
   teaser = REPLACE (teaser, 'ú', 'ú'),
   body = REPLACE (body, 'ú', 'ú'),
   title = REPLACE (title, 'çã', 'çã'),
   teaser = REPLACE (teaser, 'çã', 'çã'),
   body = REPLACE (body, 'çã', 'çã'),
   title = REPLACE (title,'ã', 'ã'),
   teaser = REPLACE (teaser,'ã', 'ã'),
   body = REPLACE (body,'ã', 'ã'),
   title = REPLACE (title, 'á', 'á'),
   teaser = REPLACE (teaser, 'á', 'á'),
   body = REPLACE (body, 'á', 'á'),
   title = REPLACE (title, 'ê', 'ê'),
   teaser = REPLACE (teaser, 'ê', 'ê'),
   body = REPLACE (body, 'ê', 'ê'),
   title = REPLACE (title, 'é', 'é'),
   teaser = REPLACE (teaser, 'é', 'é'),
   body = REPLACE (body, 'é', 'é'),
   title = REPLACE (title, 'ç', 'ç'),
   teaser = REPLACE (teaser, 'ç', 'ç'),
   body = REPLACE (body, 'ç', 'ç'),
   title = REPLACE (title, 'ó', 'ó'),
   teaser = REPLACE (teaser, 'ó', 'ó'),
   body = REPLACE (body, 'ó', 'ó'),
   title = REPLACE (title, 'Ã', 'í'),
   teaser = REPLACE (teaser, 'Ã', 'í'),
   body = REPLACE (body, 'Ã', 'í');

-- ***************************************************************

UPDATE comments SET
   subject = REPLACE (subject, 'ú', 'ú'),
   subject = REPLACE (subject, 'çã', 'çã'),
   subject = REPLACE (subject,'ã', 'ã'),
   subject = REPLACE (subject, 'á', 'á'),
   subject = REPLACE (subject, 'ê', 'ê'),
   subject = REPLACE (subject, 'é', 'é'),
   subject = REPLACE (subject, 'ç', 'ç'),
   subject = REPLACE (subject, 'ó', 'ó'),
   subject = REPLACE (subject, 'Ã', 'í');

E se alguém entender plenamente esta mixórdia que são estes character encodings, e porque dá tanto trabalho, gostaria de saber. Porque é que todo mundo já não usa UTF8 na internet? É mail que chega com caracteres babados, sites que não renderizam direito (especialmente aqueles do Japão/Coréia/China), e vai por aí afora! Tá na hora de acabar com isso . . .

--
Cláudio

Carlos:
Porque você não ativa o recurso de receber mensagens privadas? Pode te ajudar, pessoas que não querem se expor podem também dar dicas.

--
Cláudio

  • Se logue ou se registre para poder enviar comentários
Em 04/07/2006 - 22:43 musashisama disse:

Oi Cláudio o/

Realmente o charset do meu banco esta uma incognita. Muito obrigado cara por reservar seu tempo pra dar analisada nele, agradeço mesmo pq vc vem me ajudando bastante. valeuzao =]

Sim, sobre a possivel solucao. Axo q a de rodar um script sql pra substituir os acentos bugados pelos corretos eh muito boa. Ate fiz esse teste rodando o script na tabela "node" pra testar e foi beleza. Tem mais alguns outros tipos de acentos a ver mas isso com cuidado eu tb insiro mais um replace pra eles.

So tenho mais uma duvida. Como fazer um script tipo esse q vc fez de REPLACE mas no caso pra ele fazer a troca de todos os acentos de TODAS AS TABELAS do banco de dados. Isso é possivel? Tipo um replace pra arrumar os acentos bugados de todas as tabelas do banco.

Abração cara e t+ o/

  • Se logue ou se registre para poder enviar comentários
Em 05/07/2006 - 16:59 Cláudio disse:

Carlos:

Você pode tentar fazer as substituições no arquivo texto (.sql), usando um editor de textos puro (no caso do Ubuntu, acho que se chama gedit).

Sobre o meu tempo, não há de que. Estou devolvendo o que recebi de outros, e vi que você faz o mesmo.

--
Cláudio

--
Cláudio

  • Se logue ou se registre para poder enviar comentários
Em 12/08/2006 - 17:52 Samuel Abreu (não verificado) disse:

Galera, tou migrando um site de phpwebthings pra drupal, e tive uma treta com a codificação...
O banco do drupal usa utf-8, eu importei usando utf-8 mas na hora do drupal exibir ele quebra os caracteres...

O q descobri foi que o charset q o cliente do php ta usando é latin1, por isso quebra, o q fiz foi modificar o arquivo:
drupal-4.7.3/includes/database.mysql.inc

Por após o mysql_connect (linha 52) o comando:
@mysql_query("SET CHARACTER SET 'utf8'", $connection);

E pronto, ficou tudo filé!

Obs: Tou usando php5 com mysql 5

  • Se logue ou se registre para poder enviar comentários
Designimage

Este site é feito, orgulhosamente, com Drupal.