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.
url_encode() e url_decode() tenta esses, comigo resolveu quando estava usando AJAX.
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.
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.
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.
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.