Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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.         
  14.         // define o critério
  15.         $criteria = new TCriteria;
  16.         $criteria->add(new TFilter('cliente_id''='$request['repre']));
  17.         $param['order']     = 'razao_social';
  18.         $param['direction'] = 'asc';
  19.         $criteria->setProperties($param); // order, offset
  20.         // carrega os clientes do representante informado (repre)
  21.         $all ClientesRepre::getObjects$criteria );
  22.         foreach ($all as $cliente)
  23.         {
  24.             $response[] = $cliente->toArray();
  25.         }
  26.         TTransaction::close();
  27.         
  28.         return $response;
  29.     }
  30.     /**
  31.      * Retorna o clinete especifico em cod
  32.      * @param $request HTTP request
  33.      */
  34.     public static function getCliente$request )
  35.     {
  36.         TTransaction::open('pharmapedr');
  37.         $response = array();
  38.         
  39.         // define o critério
  40.         $criteria = new TCriteria;
  41.         $criteria->add(new TFilter('id''='$request['cod']));
  42.         $criteria->add(new TFilter('cliente_id''='$request['repre']));
  43.         
  44.         // carrega o cliente especificado em cod do representante informado (repre)
  45.         $all ClientesRepre::getObjects$criteria );
  46.         foreach ($all as $cliente)
  47.         {
  48.             $response[] = $cliente->toArray();
  49.         }
  50.         TTransaction::close();
  51.         return $response;
  52.     }
  53. }
  54. ?>


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 completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto 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($responseJSON_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!