Acentos no retorno do json_encode Olá pessoal, Seguinte, estou retornando um json de minha base, porém o mesmo está retornando caracteres estranhos onde tem acentuação. O retorno vem de um serviço do rest.php do Adianti. ...
AM
Acentos no retorno do json_encode  
Olá pessoal,

Seguinte, estou retornando um json de minha base, porém o mesmo está retornando caracteres estranhos onde tem acentuação. O retorno vem de um serviço do rest.php do Adianti.

 
  1. <?php
  2. header("Content-Type: application/json; charset=utf-8", true);
  3. class ClientesRepreService
  4. {
  5. /**
  6. * Retorna todos produtos entre $from e $to
  7. * @param $request HTTP request
  8. */
  9. public static function getAll( $request )
  10. {
  11. TTransaction::open('pharmapedr');
  12. $response = array();
  13. // define o critério
  14. $criteria = new TCriteria;
  15. $criteria->add(new TFilter('cliente_id', '=', $request['repre']));
  16. $param['order'] = 'razao_social';
  17. $param['direction'] = 'asc';
  18. $criteria->setProperties($param); // order, offset
  19. // carrega os clientes do representante informado (repre)
  20. $all = ClientesRepre::getObjects( $criteria );
  21. foreach ($all as $cliente)
  22. {
  23. $response[] = $cliente->toArray();
  24. }
  25. TTransaction::close();
  26. return $response;
  27. }
  28. /**
  29. * Retorna o clinete especifico em cod
  30. * @param $request HTTP request
  31. */
  32. public static function getCliente( $request )
  33. {
  34. TTransaction::open('pharmapedr');
  35. $response = array();
  36. // define o critério
  37. $criteria = new TCriteria;
  38. $criteria->add(new TFilter('id', '=', $request['cod']));
  39. $criteria->add(new TFilter('cliente_id', '=', $request['repre']));
  40. // carrega o cliente especificado em cod do representante informado (repre)
  41. $all = ClientesRepre::getObjects( $criteria );
  42. foreach ($all as $cliente)
  43. {
  44. $response[] = $cliente->toArray();
  45. }
  46. TTransaction::close();
  47. return $response;
  48. }
  49. }
  50. ?>


O retorno:


{"status":"success","data":[{"cliente_id":"2","user_id":"2","razao_social":"u00a0ARPOADOR COMERCIO DE MEDICAMENTOS LTDA","fantasia":"FARMu00c1CIA SANTA LUCIA","endereco":"Rua Professor Quintiliano","numero":"11","complemento":"","bairro_id":"1","cidade_id":"3112","uf_id":"11","cep":null,"tipo_pessoa":"J","cpf_cgc":"27.326.719/0036-","inscricao_est":null,"vr_limite_credito":"0","vr_saldo":"0","vr_ult_compra":"0","dt_ult_compra":null,"tipo_bloqueio":"1","tipo_atividade":"1","observacoes":null,"recebe_sms":"S","envia_email":"S","vip":"S","email":null,"web_site":null,"pontos_avaliacao":null,"data_cadastro":"2018-05-15","dt_desativacao":null,"ativo":"S","id":"4"},{"cliente_id":"2","user_id":"2","razao_social":"u00a0ARPOADOR COMERCIO DE MEDICAMENTOS LTDA","fantasia":"FARMu00c1CIA SANTA LUCIA","endereco":"Rua Bernardo Horta","numero":"270","complemento":"","bairro_id":"18","cidade_id":"3112","uf_id":"11","cep":null,"tipo_pessoa":"J","cpf_cgc":"27.326.719/0037-","inscricao_est":null,"vr_limite_credito":"0","vr_saldo":"0","vr_ult_compra":"0","dt_ult_compra":null,"tipo_bloqueio":"1","tipo_atividade":"1","observacoes":null,"recebe_sms":"S","envia_email":"S","vip":"S","email":null,"web_site":null,"pontos_avaliacao":null,"data_cadastro":"2018-05-15","dt_desativacao":null,"ativo":"S","id":"5"}


Alguém sabe como resolver o problema?

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (10)


WP

tem que formatar o retorno seja convertendo os caracteres ou removendo os acentos

para o caso de querer devolver com os acentos veja a DOC do PHP


php.net/manual/es/function.json-encode.php


Exemplo: json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
AM

Willian, já tentei todas as combinações do json_encode, inclusive a sugestão no site do PHP.

To get a really clean json string use these three constants like so:

 
  1. <?php
  2. $array = ['€', 'http://example.com/some/cool/page', '337'];
  3. $bad = json_encode($array);
  4. $good = json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
  5. // $bad would be ["\u20ac","http:\/\/example.com\/some\/cool\/page","337"]
  6. // $good would be ["€","http://example.com/some/cool/page",337]
  7. ?>


Meu código de retorno modificado, return json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK) E o resultado é o mesmo:

{"status":"success","data":"[{"cliente_id":2,"user_id":2,"razao_social":"u00a0ARPOADOR COMERCIO DE MEDICAMENTOS LTDA","fantasia":"FARMu00c1CIA SANTA LUCIA","e"


AM

{"status":"success","data":"[{\"cliente_id\":2,\"user_id\":2,\"razao_social\":\"\u00a0ARPOADOR COMERCIO DE MEDICAMENTOS LTDA\",\"fantasia\":\"FARM\u00c1CIA SANTA LUCIA\",\"endereco\":\"Rua Professor Quintiliano\",\"numero\":11,\"complemento\":\"\",\"bairro_id\":1,\"cidade_id\":3112,\"uf_id\":11,\"cep\":null,\"tipo_pessoa\":\"J\",\"cpf_cgc\":\"27.326.719\/0036-\",\"inscricao_est\":null,\"vr_limite_credito\":0,\"vr_saldo\":0,\"vr_ult_compra\":0,\"dt_ult_compra\":null,\"tipo_bloqueio\":1,\"tipo_atividade\":1,\"observacoes\":null,\"recebe_sms\":\"S\",\"envia_email\":\"S\",\"vip\":\"S\",\"email\":null,\"web_site\":null,\"pontos_avaliacao\":null,\"data_cadastro\":\"2018-05-15\",\"dt_desativacao\":null,\"ativo\":\"S\",\"id\":4},
WP

não pode ser o mesmo pois o codigo de testes esta correto, seu codigo deve estar passando por outro lugar, cada o tal STATUS = success e o tal DATA que no seu codigo de exemplo não vejo?????
WP

verifique no rest.php
AM

Willian, aqui está o código atualizado: vem do rest.php do Adianti

try { if (class_exists($class)) { if (method_exists($class, $method)) { $rf = new ReflectionMethod($class, $method); if ($rf->isStatic()) { $response = call_user_func(array($class, $method), $request); } else { $response = call_user_func(array(new $class($request), $method), $request); } $response = json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK); return json_encode( array('status' => 'success', 'data' => $response)); } else { $error_message = AdiantiCoreTranslator::translate('Method ^1 not found', "$class::$method"); return json_encode( array('status' => 'error', 'data' => $error_message)); } } else { $error_message = AdiantiCoreTranslator::translate('Class ^1 not found', $class); return json_encode( array('status' => 'error', 'data' => $error_message)); } } catch (Exception $e) { return json_encode( array('status' => 'error', 'data' => $e->getMessage())); }
AM


try { if (class_exists($class)) { if (method_exists($class, $method)) { $rf = new ReflectionMethod($class, $method); if ($rf->isStatic()) { $response = call_user_func(array($class, $method), $request); } else { $response = call_user_func(array(new $class($request), $method), $request); } $response = json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK); return json_encode( array('status' => 'success', 'data' => $response)); } else { $error_message = AdiantiCoreTranslator::translate('Method ^1 not found', "$class::$method"); return json_encode( array('status' => 'error', 'data' => $error_message)); } } else { $error_message = AdiantiCoreTranslator::translate('Class ^1 not found', $class); return json_encode( array('status' => 'error', 'data' => $error_message)); } } catch (Exception $e) { return json_encode( array('status' => 'error', 'data' => $e->getMessage())); }
AM

Estou colocando as tags
e não tá formatando o código:
 
  1. <?php
  2. try
  3. {
  4. if (class_exists($class))
  5. {
  6. if (method_exists($class, $method))
  7. {
  8. $rf = new ReflectionMethod($class, $method);
  9. if ($rf->isStatic())
  10. {
  11. $response = call_user_func(array($class, $method), $request);
  12. }
  13. else
  14. {
  15. $response = call_user_func(array(new $class($request), $method), $request);
  16. }
  17. $response = json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
  18. return json_encode( array('status' => 'success', 'data' => $response));
  19. }
  20. else
  21. {
  22. $error_message = AdiantiCoreTranslator::translate('Method ^1 not found', "$class::$method");
  23. return json_encode( array('status' => 'error', 'data' => $error_message));
  24. }
  25. }
  26. else
  27. {
  28. $error_message = AdiantiCoreTranslator::translate('Class ^1 not found', $class);
  29. return json_encode( array('status' => 'error', 'data' => $error_message));
  30. }
  31. }
  32. catch (Exception $e)
  33. {
  34. return json_encode( array('status' => 'error', 'data' => $e->getMessage()));
  35. }
  36. ?>
WP

mas tu ta formatando no lugar errado rsrsrsr
tem que formatar aqui

 
  1. <?php
  2. //aplicar a todos os returns e testar
  3. return json_encode( array('status' => 'success', 'data' => $response),JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
  4. ?>
AM

rsrs, vc tem toda razão, cara, cabeça fervendo desde ontem, nem me atentei a isso!

Vlew Wilian, tô devendo o café, rsrs!