Re: [php-brasil] Problema ao converter UTF-8 para ISO-8859-1

1,687 views
Skip to first unread message

José Carlos Gonçalves da Costa

unread,
Oct 8, 2012, 3:54:04 PM10/8/12
to php-b...@googlegroups.com
Olá.
Estão com problemas quando vêm do banco de dados ou quando vão para o banco de dados?
Você já tentou modificar o charset no html?

Em 8 de outubro de 2012 15:24, Pascoal <pas...@live.nl> escreveu:
Olá pessoal,

Estou tendo dificuldade com a conversão de charset. Tenho uma aplicação que posta os dados via AJAX.

O charset dos dados que chegam ao PHP está em UTF-8 (verifiquei com mb_detect_encoding()).

Porém, nenhuma das funções abaixo de fato faz a conversão:

utf8_decode() -> converte, mas caracteres como ~ estão sendo substituídos por ?. Outras acentuações funcionam normalmente.
mb_convert_encoding($valor, "ISO-8859-1") -> mantém o charset em UTF-8;
iconv("UTF-8","ISO-8859-1",$valor) -> mantém o charset em UTF-8.

Estou emperrado.

[]s,

Pascoal

--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/php-brasil/-/2xm4fI6nb3AJ.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.



--
José Carlos Gonçalves da Costa.

Victor Narcizo

unread,
Oct 8, 2012, 3:50:26 PM10/8/12
to php-b...@googlegroups.com
Opa descarta essa resposta teinha entendido errado

Em 8 de outubro de 2012 16:49, Victor Narcizo <viol...@gmail.com> escreveu:
url_encode() e url_decode() tenta esses, comigo resolveu quando estava usando AJAX.

Victor Narcizo

unread,
Oct 8, 2012, 3:49:05 PM10/8/12
to php-b...@googlegroups.com
--
Victor Narcizo
--------------------------------------------------------------------------------
Esta mensagem pode conter informações confidenciais e/ou
privilegiadas. Se você não for o destinatário ou a pessoa
autorizada a recebê-la, não pode usar, copiar ou divulgar
as informações nela contidas ou tomar qualquer ação baseada
nelas. Se você recebeu esta mensagem por engano, por favor,
avise imediatamente o remetente, e em seguida, apague-a.
Comunicações pela Internet não podem ser garantidas quanto
à segurança ou inexistência de erros ou de vírus.
O remetente, por esta razão, não aceita responsabilidade por
qualquer erro ou omissão no contexto da mensagem decorrente
da transmissão via Internet.

Andre da Silva Severino

unread,
Oct 8, 2012, 4:13:25 PM10/8/12
to php-b...@googlegroups.com
Coloca uma string de como está vindo o dado e do resultado que vc deseja.
--
---------------------------------------------------------------------------------------------------------------------------
"Eu adoraria mudar o mundo, pena que eles não me fornecem o
código-fonte".
        ~
     \°v°
      ( . )\   --> open-source
      ^ ^
---------------------------------------------------------------------------------------------------------------------------

Emerson Maia

unread,
Oct 8, 2012, 6:38:10 PM10/8/12
to php-b...@googlegroups.com
Pra começar, a página deve estar encodada em utf-8, depois o charset do seu document type tem que estar definido como utf-8, depois verifica se no seu banco de dados esta gravando como utf-8, e em suas requisições de dados, em que formato esta vindo para você. Creio eu, sanando essas dúvidas a coisa começa a ficar séria...

Andre da Silva Severino

unread,
Oct 9, 2012, 10:15:55 AM10/9/12
to php-b...@googlegroups.com
Olá Marlon Pascoal, antes de mais nada gostaria de pedir que, se você conseguir resolver esse problema, por favor poste sua solução aqui ok ?

Recentemente tive que fazer a migração de um sistema, e lá foi exatamente da mesma forma como você postou aqui.
Aplicação em um charset e o banco de dados estava em outro. Quando migrei ela de um servidor para o outro (Windows p/ Linux), desconfigurou todo os caracteres, depois que resolvi os problema de BOM tive que reescrever praticamente o sistema todo, então arrumei e deixei alinhado com o mesmo charset na página era o mesmo do banco de dados, porque em todas as páginas tinha isto de utf8_decode(gambi).

Se o seu banco de dados está em latin1, você não pode exibir em utf no front end, você não concorda? Se o 'projeto' é grande, porque só agora deu esse problema? Antes funcionava como a acentuação ? Acho que seria interessante você cogitar a idéia de uma refatoração nesse projeto.

Abraços


Em 9 de outubro de 2012 09:56, Marlon Pascoal <pas...@live.nl> escreveu:
Na verdade, toda minha aplicação está em ISO-8859-1. A migração para UTF-8 não é algo que vem sendo cogitada, devido ao tamanho do projeto.

ex: "acórdão".

utilizando utf8_decode() a conversão acontece corretamente, mas ao salvar no banco de dados (pgsql -> latin1) -> acórd?o.

$a = $_POST[".."]; // acórdão;
mb_detect_encoding($a); // "UTF-8";
$a = mb_convert_encoding($a,"ISO-8859-1"); // acórdão
mb_detect_encoding($a); // "UTF-8";

Obrigado
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/php-brasil/-/4Oelak9vaX0J.

Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

Spiderpoison

unread,
Oct 9, 2012, 12:40:43 PM10/9/12
to php-b...@googlegroups.com
Pessoal eu já tive esse problema e consegui solucionar no meu sistema.
Da uma olhada no index.php e no _gravar/js.js

http://websystem.sourceforge.net

Cassiano Ricardo Mourão

unread,
Oct 9, 2012, 1:17:11 PM10/9/12
to php-b...@googlegroups.com
json_encode e _decode... nada também?

Em 9 de outubro de 2012 14:05, Marlon Pascoal <pas...@live.nl> escreveu:
Olá André!

Na verdade, todo o sistema utiliza latin1 / iso-8859-1.

Porém, como sabemos, o json só funciona corretamente com UTF-8. Dessa forma, alguns conteúdos precisam ser formatados em UTF-8 para serem apresentados na tela. (os que são carregados dinamicamente por AJAX).

Mas, independente disto, o fato é que um dos formulários está sendo postado em UTF8 e, como de costume, sempre utilizei o utf8_* para resolver. Mas, neste caso, por algum motivo, ele simplesmente não converte, notei que o retorno de mb_detect_encoding() dos campos que não possuem nenhum caractere especial são normalmente convertidos para ASCII, mas os que possuem acentuação são mantidos em UTF-8.

Quanto a migração do charset do projeto, não é algo tão simples pois trata-se de um sistema que já está no mercado há muitos anos e, embora o charset default do php (5.4+) e outros recursos estejam mudando para UTF-8. Ainda não há um planejamento estratégico para a migração, sendo esta considerada inviável no momento.

Como disse, já tive problemas parecidos antes, mas sempre resolvi com utf8_*, ou funções do pacote multibyte. Este, no entanto não está sendo simples.

Abraços,

Marlon Pascoal
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/php-brasil/-/5WIdaO_w5LQJ.

Andre da Silva Severino

unread,
Oct 9, 2012, 1:13:41 PM10/9/12
to php-b...@googlegroups.com
Olá Marlon, você poderia colocar a string(conteudo) de envio(ajax) e o retorno(json) ?

Para eu simular aqui e ver uma coisita :-D

Em 9 de outubro de 2012 14:05, Marlon Pascoal <pas...@live.nl> escreveu:
Olá André!

Na verdade, todo o sistema utiliza latin1 / iso-8859-1.

Porém, como sabemos, o json só funciona corretamente com UTF-8. Dessa forma, alguns conteúdos precisam ser formatados em UTF-8 para serem apresentados na tela. (os que são carregados dinamicamente por AJAX).

Mas, independente disto, o fato é que um dos formulários está sendo postado em UTF8 e, como de costume, sempre utilizei o utf8_* para resolver. Mas, neste caso, por algum motivo, ele simplesmente não converte, notei que o retorno de mb_detect_encoding() dos campos que não possuem nenhum caractere especial são normalmente convertidos para ASCII, mas os que possuem acentuação são mantidos em UTF-8.

Quanto a migração do charset do projeto, não é algo tão simples pois trata-se de um sistema que já está no mercado há muitos anos e, embora o charset default do php (5.4+) e outros recursos estejam mudando para UTF-8. Ainda não há um planejamento estratégico para a migração, sendo esta considerada inviável no momento.

Como disse, já tive problemas parecidos antes, mas sempre resolvi com utf8_*, ou funções do pacote multibyte. Este, no entanto não está sendo simples.

Abraços,

Marlon Pascoal

Em terça-feira, 9 de outubro de 2012 11h16min55s UTC-3, André Severino escreveu:
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/php-brasil/-/5WIdaO_w5LQJ.

Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

Daniel Sá

unread,
Oct 9, 2012, 2:02:46 PM10/9/12
to php-b...@googlegroups.com
Na conexão com o banco de dados defina o charset:

$connect_server = mysql_connect("127.0.0.1", "root", "123456")

mysql_set_charset('utf8',$connect_server);

$connect_db = mysql_select_db($banco, $connect_server);
Atenciosamente,

Daniel Sá ( Web Master )
(84) 8842-3963

Wemerson Couto Guimarães

unread,
Oct 9, 2012, 1:39:50 PM10/9/12
to php-b...@googlegroups.com
Eu tive muitos problemas de conversão em dados vindos de fontes RSS externas e foi um saco resolver... 

Aqui tem 2 pastebins que eu postei quando tava tentando resolver...

Esse aqui http://pastebin.com/FfCJehwf# ilustra uma tentativa que não deu 100% correto... pois caracteres como aspa dupla de citação ( &raquo; ) e pontos &ndash; não são convertidos corretamente.

Esse aqui http://pastebin.com/EPy6PrC0 já ilustra como consegui resolver a situação acima...



Isso foi o que me salvou... veja mais detalhes aqui: https://groups.google.com/d/topic/php-brasil/R5Y5D5BZG4Y/discussion



--
Wemerson Guimarães
Rio Verde - Go - Brasil

Suissa

unread,
Oct 10, 2012, 7:14:15 PM10/10/12
to php-b...@googlegroups.com
Tenta iconv('UTF-8', 'ISO-8859-1', $string);
ou apelando =p iconv('UTF-8', 'windows-1252', $string);


Em 9 de outubro de 2012 16:57, Weuller Krysthian <weuller....@gmail.com> escreveu:
Tenho resolvido utilizando as funções iconv() e funcionou, aqui também é iso-8859-1, tanto banco qt aplicação, ai é só converter na hora que for enviar os dados para utf-8, e no php converter de novo para iso, as que ta recebendo da requisição para inserir no banco.

Em segunda-feira, 8 de outubro de 2012 15h24min04s UTC-3, Marlon Pascoal escreveu:
Olá pessoal,

Estou tendo dificuldade com a conversão de charset. Tenho uma aplicação que posta os dados via AJAX.

O charset dos dados que chegam ao PHP está em UTF-8 (verifiquei com mb_detect_encoding()).

Porém, nenhuma das funções abaixo de fato faz a conversão:

utf8_decode() -> converte, mas caracteres como ~ estão sendo substituídos por ?. Outras acentuações funcionam normalmente.
mb_convert_encoding($valor, "ISO-8859-1") -> mantém o charset em UTF-8;
iconv("UTF-8","ISO-8859-1",$valor) -> mantém o charset em UTF-8.

Estou emperrado.

[]s,

Pascoal

--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/php-brasil/-/tTSvgOdyt60J.

Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.



--
Jean C. Nascimento aka Suissa
Technical Leader - Nodeware- SP
Reply all
Reply to author
Forward
0 new messages