centurion 0 Denunciar post Postado Junho 17, 2012 olá pessoal to quebrando a cabeça e não consigo resolver erros de acentuação que julgo vem do php é o seguinte: tenho um sistema em html + php + mysql que funcionava no servidor antigo no sistema iso 8859-1 só que no novo servidor por padrão usam o utf-8 e nem adianta pedir pro suporte configurar pro latin 1 então tive um trabalhão danado pra salvar todos os arquivos convertidos para utf-8 como já dito, arrumei todas tabelas com engine inodb charset utf-8 e calation general ci, no banco de dados alterei pra utf - 8 tambem, limpei as tabelas e importei de novo porem o problema continua aparece palavras que no banco estão com acentuação corrreta só que quando abro o browse aparece a palavra faltando caracters tipo rondônia mostra rond e o maldito losango com um ? dentro dele como poderei concertar isso?... detalhe quando vou em codificação no navegador que tá setado em utf- 8 e mudo pra iso 8859-1 tudo volta ao normal. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 17, 2012 você ainda possui o backup original com o encode latin ? se for o caso, poderia apenas migrar para o novo server sem fazer conversões se o server permitir usar o php_flag ou php_value, bastaria fazer isso no htaccess: php_value mbstring.encoding_translation 0 isso impede que o encode seja traduzido para o padrão do output do servidor. a definição do charset tb pode ser feita, exemplo php_value default_charset UTF-8 no seu caso php_value default_charset ISO-8859-1 php_value mbstring.encoding_translation 0 independente de como está o charset do servidor, será mantido o encode que você definir para o seu ambiente no vhost outros parâmetros do mbstring caso apenas isso não resolva: php_value mbstring.http_input php_value mbstring.http_output php_value mbstring.internal_encoding enfim.. esses parâmetros podem ser combinados de várias formas. aplique o que for conveniente para o seu caso. Fiquei de fazer um artigo em complemento ao topico "PHP, HTML, MySQL - Charset Encoding", mas estou sem tempo para isso. sobre as flags para configurar o mbstring em tempo de exeução, veja alguns exemplos: http://andante0727.blog81.fc2.com/blog-entry-48.html em japonês.. mas é compreensível... são termos técnicos outro modo de resolver é converter os dados como tentou fazer.. segundo o que descreveu, aparentemente fez tudo certo, mas se não deu resultado esperado pode ter falhado em algum ponto, por isso, verifique o topico: PHP, HTML, MySQL - Charset Encoding" Compartilhar este post Link para o post Compartilhar em outros sites
centurion 0 Denunciar post Postado Junho 17, 2012 você ainda possui o backup original com o encode latin ? se for o caso, poderia apenas migrar para o novo server sem fazer conversões se o server permitir usar o php_flag ou php_value, bastaria fazer isso no htaccess: php_value mbstring.encoding_translation 0 isso impede que o encode seja traduzido para o padrão do output do servidor. a definição do charset tb pode ser feita, exemplo php_value default_charset UTF-8 no seu caso php_value default_charset ISO-8859-1 php_value mbstring.encoding_translation 0 independente de como está o charset do servidor, será mantido o encode que você definir para o seu ambiente no vhost outros parâmetros do mbstring caso apenas isso não resolva: php_value mbstring.http_input php_value mbstring.http_output php_value mbstring.internal_encoding enfim.. esses parâmetros podem ser combinados de várias formas. aplique o que for conveniente para o seu caso. Fiquei de fazer um artigo em complemento ao topico "PHP, HTML, MySQL - Charset Encoding", mas estou sem tempo para isso. sobre as flags para configurar o mbstring em tempo de exeução, veja alguns exemplos: http://andante0727.b...g-entry-48.html em japonês.. mas é compreensível... são termos técnicos outro modo de resolver é converter os dados como tentou fazer.. segundo o que descreveu, aparentemente fez tudo certo, mas se não deu resultado esperado pode ter falhado em algum ponto, por isso, verifique o topico: PHP, HTML, MySQL - Charset Encoding" Oi, Hinon boa tarde! em primeiro lugar obrigado por responder o post, estou fazendo os testes e possiveis correções no meu servidor local simulando as mesmas configurações do server remoto. uma coisa que você fêz me lembrar é de sempre fazer backup o que eu devia ter feito, na verdade tenho os arquivos originais, porem sem os devidos ajustes como erros de sintaxe, tradução etc assim sendo tenho que deixar tudo em utf-8 pois o mesmo se não é será padrão à nível mundial, ademais devo continuar com ele visto que o site em questão ser multilinguagem. conforme mencionou aparentemente fiz tudo certo devo ter falhado em algum ponto ainda mais com a cuca fritando como está a minha quem sabe você ou outro colega de cabeça arrejada podem encontrar a solução abaixo print das telas que mostram bem os problemas que precisam solução: letras faltando no combox | browse em utf-8 padrão | browse usando iso 8859-1 cara isso é de enlouquecer onde estou errando? ai no link 'letras faltando no combox' dá pra arrumar digitando os dados outra vêz, já conforme se pode ver nos outros dois link não sei mais o que fazer. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Junho 17, 2012 O que você está utilizando para a conexão, funções mysql ou PDO? Se o seu problema é somente com dados vindos do SGBD. Você pode, na conexão, definir o tipo de charset retornado pelo banco. É bem simples e resolve muita dor de cabeça. De uma olhada nisso: http://php.net/manual/en/function.mysql-set-charset.php Para a PDO, é um pouco diferente, você define na conexão: $pdo = new PDO( $dsn, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'") ); Caso passando para UTF8 não te resolver, transforme para ISO 8859-1 hinom: Não conhecia esse procedimento, bem interessante! Compartilhar este post Link para o post Compartilhar em outros sites
centurion 0 Denunciar post Postado Junho 18, 2012 Olá, Gabriel! uso mysql como mostrado no link 'faltando letras no combox' como o bd tbm está em utf -8 tudo que tem acento ele elimina, fiz isso na mão mas deu erro ao atualizar as tabelas tive que importar o banco de novo, ai voltei pra estaca zero terei que reinserir os dados novamente, te confesso não tô aguentando mais isso, já no html toda acentuação funciona em utf-8 sem problemas. Vou tentar voltar pro iso 8859-1 e ver o que acontece. Quanto a sugestão que você me passou já uso ela porem não resolveu. Compartilhar este post Link para o post Compartilhar em outros sites
Thiago Moraes 32 Denunciar post Postado Junho 18, 2012 Estava com erros de acento tbm e resolvi configurando o editor que estava em latin para utf-8. Se no banco ele salva corretamente mas da erro quando exibe na página, pode ser isso. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 18, 2012 eu iria sugerir o mesmo que no post #4.. mas se SET NAMES não deu jeito... vamos ao debug.. verfique como está o encode no banco de dados.. não é o encode das tabelas mas sim dos caracteres. pode ser que tenha inserido os dados ainda no formato latin dentro da tabelas utf-8.. os dados provavelmente não se corromperam.. mas enfim, poderia mostrar como fez a migração do banco de dados ? acho que parte do problema pode estar aí Compartilhar este post Link para o post Compartilhar em outros sites
fred silva 1 Denunciar post Postado Junho 18, 2012 Use o utf8_encode Ex: $variavel = utf8_encode($dado_do_banco); Caso não funcione use o htmlentities Ex: $variavel = htmlentities($dado_do_banco); T+ Compartilhar este post Link para o post Compartilhar em outros sites
centurion 0 Denunciar post Postado Junho 19, 2012 olá, thiago, hinom e fred boa noite! sim verifiquei o charset e o colation e tinha utf-8 em toda a tabela menos a ultima que ficou em iso 8859-1 fiz um select tipo alter table 'nome_banco' charset default utf-8 collation utf-8 general_ci ai todas as tabelas do banco ficarm em utf - 8 como falei no início do post limpei as tabelas e importei os dados já com o bd convertido, porem notei q só isso não basta, a conversão para utf-8 não é tão simples como eu pensava, pois alem do bd, das paginas html do php e do editor é preciso adicionar códigos adicionais como mbstring citado pelo hinom, mais ainda imagine descobrir qual dos 100.000 caracteres usados nessa codificação é o certo para corrigir todos esses erros de acentuação. conclusão: sem dúvida é a codificação que tende a ser normalizada como padrão só que tem passar por muitos ajustes, alias me lembrei de outra coisa no linux se converte vários arquivos com iconv ácontece que uso o ruindows ai a conversa já é outra. bom pra não fugir do assunto ainda estou as voltas com o sistema tentando chegar a um final feliz há hinom em q parte do código php uso o mbstring? por enquanto é isso até mais! Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 19, 2012 apenas algumas observações. sem dúvida é a codificação que tende a ser normalizada como padrão utf-8 é o charset padrão para internacionalização (internacionalization pattern). Não se tornará o padrão futuramente porque já é há mais de 5 anos. sim verifiquei o charset e o colation e tinha utf-8 em toda a tabela menos a ultima que ficou em iso 8859-1 fiz um select tipo alter table 'nome_banco' charset default utf-8 collation utf-8 general_ci ai todas as tabelas do banco ficarm em utf - 8 não entendi muito bem o que quiz dizer. pode explicar melhor a forma como fez a conversão dos dados ? quais ferramentas usou e como usou ? É possível criar um script PHP para converter os dados. A lógica do script é ler todos os arquivos .php em folders e subfolders, e salvar o conteúdo convertido em outra pasta $content = mb_convert_encoding( read('arquivo.php'), 'UTF-8', 'ISO-8859-1'); http://php.net/mb_convert_encoding Compartilhar este post Link para o post Compartilhar em outros sites
FernandoPhP 9 Denunciar post Postado Junho 19, 2012 tem um post que explica qual função utilizar para pegar dados do banco, qual utilizar para salvar no banco e enviar por e-mail, vale a pena dá uma olhada no final do post. Link não autorizado removido Compartilhar este post Link para o post Compartilhar em outros sites
centurion 0 Denunciar post Postado Junho 23, 2012 Oi, amigos! ainda não consegui solucionar o problema fiz uma consulta pelo phpmyadmin e veio esse resultado: Variable_name Value character_set_clientutf8character_set_connectionutf8character_set_databaseutf8character_set_resultsutf8character_set_serverlatin1character_set_systemutf8character_sets_dir acho que o problema tá ali no latin1 como faço pra alterar isso? e no callation assim: Variable_name Value collation_connectionutf8_general_cicollation_databaseutf8_general_cicollation_serverlatin1_swedish_ci Compartilhar este post Link para o post Compartilhar em outros sites