Acentuação PHP + JSON

2,751 views
Skip to first unread message

Diego Ramos

unread,
Jun 23, 2012, 3:10:59 PM6/23/12
to php-b...@googlegroups.com
Olá pessoal, tudo certo?

Estou precisando de uma força para resolver um problema de acentuação, minha situação é a seguinte:

Web service que disponibiliza os dados por json, banco de dados utf-8(por motivos da função json_encode do PHP).
Estou consumindo as informações pelo Android, mas indo diretamente na página, ainda não consegui acertar a acentuação da mesma.

Utilizo o código para cuspir os dados em json:

[conexão com banco,etc...]
    header('Content-type: application/json');
    echo json_encode(array('registros'=>$registros));


Alguem já passou por isso, ou pode dar uma dica?

Obrigado!


Sds,


"Há grandes homens que fazem com que todos se sintam pequenos. Mas o verdadeiro grande homem é aquele que faz com que todos se sintam grandes." (Gilbert Keith Chesterton)
---
Skype: rdiego26
Web: www.diegoramos.info
Encurtador: e.diegoramos.info

Keldnner Bader

unread,
Jun 23, 2012, 3:40:17 PM6/23/12
to php-b...@googlegroups.com
Você tem que dar nas variaveis do seu array um utf8_encode.

exemplo nome => utf8_encode($variavel);



--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
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.



--
Att,
Keldnner Bader
(41) 9848-0746 [Tim]
(41) 8857-8187 [Claro]

Diego Ramos

unread,
Jun 23, 2012, 3:45:37 PM6/23/12
to php-b...@googlegroups.com
Keldnner,

Já havia usado ela:

Pegando normalmente do banco: l\u00e2mpadas
Utilizando utf8_encode: l\u00c3\u00a2mpadas





Sds,


"Há grandes homens que fazem com que todos se sintam pequenos. Mas o verdadeiro grande homem é aquele que faz com que todos se sintam grandes." (Gilbert Keith Chesterton)
---
Skype: rdiego26
Web: www.diegoramos.info
Encurtador: e.diegoramos.info



2012/6/23 Keldnner Bader <em...@keldnner.com.br>

Keldnner Bader

unread,
Jun 23, 2012, 3:51:18 PM6/23/12
to php-b...@googlegroups.com
Faca um teste, de retornar esses dados em json no php direto, pq se nao vem a codificação do já e da pagina, tenta dar um charset="utf-8" na linha q puxa a tag de script

Diego Ramos

unread,
Jun 23, 2012, 4:06:16 PM6/23/12
to php-b...@googlegroups.com
Keldnner,

Jogando na marra, (até mesmo sem tratamento com a utf8_encode), vai:


<code>
  elseif($format == 'debug')
  {
    echo '<html>';
    echo '<head>';
    echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> ';
    echo '</head>';
    echo '<body>';
    var_dump($registros);   
    echo '</body>';
    echo '</html>';
  }

</code>

Resultado:
array(2) { [0]=> array(1) { ["post"]=> array(5) { ["id_dica"]=> string(1) "3" ["nome"]=> string(18) "Feche a geladeira!" ["descricao"]=> string(177) "Abrir e fechar a geladeira constantemente ou deixá-la aberta sem utilizar pode custar mais de 60 reais por ano em desperdício de energia. Portanto, feche a porta da geladeira!" ["url"]=> NULL ["tipodica"]=> string(10) "DOMÉSTICA" } } [1]=> array(1) { ["post"]=> array(5) { ["id_dica"]=> string(1) "4" ["nome"]=> string(27) "Use lâmpadas fluorescentes" ["descricao"]=> string(193) "As lâmpadas fluorescentes com a mesma luminosidade das incandescentes podem levar a uma economia de mais de 100 reais por ano (considerando um apartamento mediano de uma família de 4 pessoas)" ["url"]=> NULL ["tipodica"]=> string(10) "DOMÉSTICA" } } }



O problema todo é como consumir essa saída, já que não está em json. :s

Diego Ramos

unread,
Jun 23, 2012, 4:28:46 PM6/23/12
to php-b...@googlegroups.com
Keldnner,

O problema ocorre quando eu uso a json_encode(mesmo tratando as variáveis que compõem o array com utf8_encode):

 
  elseif($format == 'debug')
  {
    echo '<html>';
    echo '<head>';
    echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> ';
    echo '</head>';
    echo '<body>';
    echo json_encode(array('registros'=>$registros));   
    echo '</body>';
    echo '</html>';

  }



Sds,


"Há grandes homens que fazem com que todos se sintam pequenos. Mas o verdadeiro grande homem é aquele que faz com que todos se sintam grandes." (Gilbert Keith Chesterton)
---
Skype: rdiego26
Web: www.diegoramos.info
Encurtador: e.diegoramos.info



2012/6/23 Diego Ramos <rdie...@gmail.com>

Pablo Willian

unread,
Jun 23, 2012, 7:57:21 PM6/23/12
to php-b...@googlegroups.com
E se tentar utf8_encode(json_encode($array));


From: rdie...@gmail.com
Date: Sat, 23 Jun 2012 17:28:46 -0300
Subject: Re: [php-brasil] Acentuação PHP + JSON
To: php-b...@googlegroups.com

Diego Ramos

unread,
Jun 24, 2012, 11:58:41 AM6/24/12
to php-b...@googlegroups.com
Fala Pablo!

Rapaz, mesma coisa, ele ainda sae com os \xxxx:

<code>
[...]
  $registros = array();
  if(pg_num_rows($result))
  {
    while($registro = pg_fetch_assoc($result))
    {
    //ACERTANDO ACENTUAÇÃO
     
         $registro["id_dica"]         = $registro["id_dica"];
      $registro["nome"]         = $registro["nome"];
      $registro["descricao"]     = $registro["descricao"];
      $registro["url"]         = $registro["url"];
      $registro["tipodica"]     = $registro["tipodica"];
     
      $registros[] = array('post'=>$registro);
    }
  }
  if($format == 'json')
  {
    //header('Content-type: application/json; charset=utf-8', true);   
    header('Content-type: application/json');       
    echo utf8_encode(json_encode(array('registros'=>$registros)));

  }
</code>


Saída:

{"registros":[{"post":{"id_dica":"3","nome":"Feche a geladeira!","descricao":"Abrir e fechar a geladeira constantemente ou deix\u00e1-la aberta sem utilizar pode custar mais de 60 reais por ano em desperd\u00edcio de energia. Portanto, feche a porta da geladeira!","url":null,"tipodica":"DOM\u00c9STICA"}},{"post":{"id_dica":"4","nome":"Use l\u00e2mpadas fluorescentes","descricao":"As l\u00e2mpadas fluorescentes com a mesma luminosidade das incandescentes podem levar a uma economia de mais de 100 reais por ano (considerando um apartamento mediano de uma fam\u00edlia de 4 pessoas)","url":null,"tipodica":"DOM\u00c9STICA"}}]}





Sds,


"Há grandes homens que fazem com que todos se sintam pequenos. Mas o verdadeiro grande homem é aquele que faz com que todos se sintam grandes." (Gilbert Keith Chesterton)
---
Skype: rdiego26
Web: www.diegoramos.info
Encurtador: e.diegoramos.info



2012/6/23 Pablo Willian <pablow...@hotmail.com>

Rodrigo Urbinati Maia

unread,
Jun 26, 2012, 7:53:17 AM6/26/12
to php-b...@googlegroups.com
Na sua conexão com o banco já tentou setar o charset pra utf8?

$this->base = mysql_connect($this->host, $this->user, $this->pass) or $this->erroDB();
mysql_select_db($this->data, $this->base) or $this->erroDB();
mysql_set_charset("utf8", $this->base);

Rodrigo Maia
http://www.dicashop.com.br/
rod...@gmail.com

Diego Ramos

unread,
Jun 26, 2012, 11:28:22 AM6/26/12
to php-b...@googlegroups.com
Fala Rodrigo!

Rapaz, tentei com pg_set_client_encoding($link, "UFT8");  e o options do pg_connect e nada.


Sds,


"Há grandes homens que fazem com que todos se sintam pequenos. Mas o verdadeiro grande homem é aquele que faz com que todos se sintam grandes." (Gilbert Keith Chesterton)
---
Skype: rdiego26
Web: www.diegoramos.info
Encurtador: e.diegoramos.info



2012/6/26 Rodrigo Urbinati Maia <rod...@gmail.com>

Alexandre Di Salvo

unread,
Jun 26, 2012, 12:26:59 PM6/26/12
to php-b...@googlegroups.com
Já cogitou usar PDO? Lá vc tbm pode setar utf8.

Atenciosamente, 

Alexandre Di Salvo
skype: disalvo.alexandre

Iuri Andrei Guntchnigg

unread,
Jun 26, 2012, 2:52:28 PM6/26/12
to php-b...@googlegroups.com
Cara, porque tu não manda as strings com url_Encode?
e no JS tu sua algo uriDecodeComponent/unescape ??/



---
Iuri Guntchnigg
http://about.me/iuriag

Keldnner Bader

unread,
Jun 26, 2012, 3:12:23 PM6/26/12
to php-b...@googlegroups.com
Eu conversei com ele e entendi, ele queria passar para o Java/Android tudo certinho, sem ter que tratar a entrada do que vem do json, que é o que vem hoje.

Rodrigo Urbinati Maia

unread,
Jun 26, 2012, 3:23:08 PM6/26/12
to php-b...@googlegroups.com
Eu ainda não vi ninguem falando mas já tentou ver qual o encode que seu editor de código usa?
Em 26 de junho de 2012 15:52, Iuri Andrei Guntchnigg <iur...@gmail.com> escreveu:

Diego Ramos

unread,
Jun 30, 2012, 10:44:15 AM6/30/12
to php-b...@googlegroups.com
Fala Rodrigo,

Usei o file -bi e vi que a codificação que meu editor estava salvando era ISO, alterei ele(VIM) com
set encoding=utf-8
set fileencoding=utf-8


E mesmo assim não consegui o resultado que quis, quando uso uft8_decode sempre vem null.


Quero agradecer mais uma vez a atenção de todos, vou continuar procurando aqui e encontrando a resolução posto aqui.

Diego Ramos

unread,
Jul 3, 2012, 12:53:45 PM7/3/12
to php-b...@googlegroups.com
Fala Iuri,

Rapaz, fiz um cliente.php que consome o webservice.php via jQuery(getJSON), consigo obter os dados tranquilamente e a codificação está correta(ufa!), agora como faço para escrever na página o json que obtive?


Se acessar aqui, ele vai alertando com os dados.

Obrigado a todos.

Sds,


"Há grandes homens que fazem com que todos se sintam pequenos. Mas o verdadeiro grande homem é aquele que faz com que todos se sintam grandes." (Gilbert Keith Chesterton)
---
Skype: rdiego26
Web: www.diegoramos.info
Encurtador: e.diegoramos.info



2012/6/26 Iuri Andrei Guntchnigg <iur...@gmail.com>

Igor Padovan da Silva

unread,
Jul 3, 2012, 12:56:30 PM7/3/12
to php-b...@googlegroups.com
usa o .html() do jquery ou append

Diego Ramos

unread,
Jul 3, 2012, 2:00:50 PM7/3/12
to php-b...@googlegroups.com
Salve Igor,

Rapaz, confesso que ando meio enferrujado em Jquery, mas seria isso(ignore o for com o alert)?


<!DOCTYPE html>
<html>
<head>
  <style>img{ height: 100px; float: left; }</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div id="resultado">

</div>
<script>
        function(data){
 $.each(data.registros, function(i, item){
alert("id_dica: " + item.post.id_dica + "\n" + 
"nome: " + item.post.nome + "\n" +
"descricao: " + item.post.descricao + "\n" +
"url: " + item.post.url + "\n" +
"tipodica: " + item.post.tipodica + "\n" +
"------------------------");
});
 $('#resultado').html(data.registros.post);
        });
</script>
</body>
</html>

Sds,


"Há grandes homens que fazem com que todos se sintam pequenos. Mas o verdadeiro grande homem é aquele que faz com que todos se sintam grandes." (Gilbert Keith Chesterton)
---
Skype: rdiego26
Web: www.diegoramos.info
Encurtador: e.diegoramos.info



2012/7/3 Igor Padovan da Silva <igorp...@gmail.com>

Keldnner Bader

unread,
Jul 3, 2012, 1:08:16 PM7/3/12
to php-b...@googlegroups.com
Eu disse pra ti que o retorno em javascript pega certinho :P

Diego Ramos

unread,
Jul 3, 2012, 2:05:24 PM7/3/12
to php-b...@googlegroups.com
Grande Keldnner,

Rapaz, eu estou tentando todas as possibilidades para não usar a json_encode do PHP! rs
Ela que está ferrando, por sem tratamento as palavras acentuadas são retornadas sem problemas.

Minha dúvida agora é como escrever o json que eu consumi.rs


Sds,


"Há grandes homens que fazem com que todos se sintam pequenos. Mas o verdadeiro grande homem é aquele que faz com que todos se sintam grandes." (Gilbert Keith Chesterton)
---
Skype: rdiego26
Web: www.diegoramos.info
Encurtador: e.diegoramos.info



2012/7/3 Keldnner Bader <em...@keldnner.com.br>

Keldnner Bader

unread,
Jul 3, 2012, 2:24:51 PM7/3/12
to php-b...@googlegroups.com
Só me diga uma coisa, tem a necessidade de tu passar o registros? não é mais fácil direto os posts?
Quando tiver on me procura.

Diego Ramos

unread,
Jul 3, 2012, 2:48:47 PM7/3/12
to php-b...@googlegroups.com
Keldnner, 

Sem problemas, posso alterar o webservice para retornar somente os posts.
Reply all
Reply to author
Forward
0 new messages