Pesquisa
Itens ativos
Posts mais lidos hoje
Login do usuário
Assine o RSS do Drupal-BR
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
Enviado por musashisama em 26/06/2006 - 22:50
- Se logue ou se registre para poder enviar comentários
- 984 leituras




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
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 =\
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
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:
Referências:
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
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
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
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 =]
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:
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.
phpmyadmin/index.php?lang=ptbr-utf-8&server=1&collation_connection=utf8_bin
Como está a sua? Você consegue mudar a seleção?
script sql:
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
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/
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
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