Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vadio

json_encode

Recommended Posts

pessoal to com problema pra resgatar o dado de um json

O problema é o seguinte se não tem acentuação ele retorna na boa.. mas se tem ele retorna null

 

$arr = array("error"=>"Ação desconhecida");
echo json_encode($arr);

Compartilhar este post


Link para o post
Compartilhar em outros sites

nunca tive esse tipo de problema.. por precaução até fiz um teste aqui.. o resultado não bate com o que descreveu

 

retorno isso:

{"error":"A\u00e7\u00e3o desconhecida"}

 

 

ambiente

php5.3.14

apache 2.2.22 (win 8 preview)

 

 

referente a mb_internal_encoding

deu o mesmo resultado para ISO-8859-1 e UTF-8

 

 

certifique-se das configurações mbstring e iconv do seu ambiente ou se não está confundindo algo..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você provavelmente está tentando retorno em uma requisição cujo retorno é dado em UTF-8!

Se o seu conjunto de caracteres não for UTF-8, tente o seguinte

 

$arr = array("error"=>utf8_encode("Ação desconhecida"));
echo json_encode($arr);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui vai uma explicação

 

$arr = array("error"=>"acentu");
echo json_encode($arr);

 

 

e vai retornar o seguinte objeto json em forma de string:

 

{"error":"acentu"}

 

se você conseguir obter este resultado em uma variável javascript chamada "obj", você vai poder manipular as mesmas informações no lado do cliente, dessa forma:

 

alert(obj.error);

 

 

As facetas da função json_encode

Já vou dar de cara o problema que eu encontrei com esta função: ela não sabe converter símbolos e letras acentuadas em strings para seus códigos respondentes em html. Isso é um problema, pois se a string tiver pelo menos um caracter desse tipo, você terá um retorno inesperado. Vamos a um teste:

 

$array = array("erro"=>"ácentu");
echo json_encode($array);

terá o seguinte retorno:
{"erro":null}

 

Como você pode observar a função json_encode não reconhece a string inteira, só por causa daquele azinho acentuado. Pode ser que você obtenha outros resultados, dependendo da configuração do seu servidor PHP. Hmm, isso me cheira como problema de codificação, o que você acha?

Soulção: aplicando htmlentities em todos elementos com array_map

Felizmente, através da poderosa função htmlentities, podemos contornar este problema. Esta função tem a capacidade de converter caracteres especiais (letras acentuadas ou símbolos bizarros) em seus correspondentes códigos html. Já vou dar a solução para o problema em apenas uma linha de código para adiantar:

 

$array = array("erro"=>"ácentu");
$safe = array_map('htmlentities',$array);

echo json_encode($safe);

 

Já era. Problema resolvido.

Pensamentos finais

Vimos aqui rapidamente a funcionalidade da função json_encode para transformar uma array PHP em um objeto JSON. Essa função também aceita um objeto no lugar de array, mas veja que neste caso apenas as propriedades públicas do objeto serão capturados pela função. json_encode é uma ótima ferramenta para quando precisamos transportar informações retiradas de uma tabela no servidor até o javascript, num contexto tipo AJAX.

 

A solução era fácil: só aplicar htmlentities() codificando cada elemento de uma array, passando essa função como callback usando o array_map.

 

Desde já estar ai a minha Ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema parece estar na má configuração do ambiente no que se refere ao charset encode.

 

se o ambiente estiver bem configurado não precisa fazer conversão usando utf8_encode e pior ainda, usar htmlentities..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.