TransWikia.com

Json_econde erro ao parsear caracteres especiais vindos do banco ( usando PDO mysql)

Stack Overflow em Português Asked by Israel Zebulon on December 30, 2020

Numa tabela do banco existem palavras acentuadas ou com ç .
Ao usar o json_encode no php para enviar o resultado para a view, o json quebra devido o erro no parser.
Qual a melhor maneira de tratar esses caracteres antes de chamar o json_encode?

Exemplo de como retorna do banco. Esses objetos devem ser parseados para json.

 [0] => Array
        (
            [usuario_nome] => Oliveira Souza
        )

    [1] => Array
        (
            [usuario_nome] => jão çávão
        )

    [2] => Array
        (
            [usuario_nome] => joao josjdsojd 
        )

Consegui passar os dados da seguinte maneira:

$sth = $conn->query("SELECT * FROM v_usuarios  where usuario_ativo = 'S' $condicao order by usuario_nome ASC");
    $sth->execute();
    $datas = array();

    while($data = $sth->fetchAll(PDO::FETCH_ASSOC))
    array_push($datas,json_encode($data, JSON_UNESCAPED_UNICODE));



$retorno =new Response(($datas[0]));
$retorno->headers->set('Content-Type','application/json; charset=utf-8');
return $retorno;

Mas existiria alguma forma melhor?

One Answer

Amigo, já tive muito desses problemas e não é fácil resolvê-lo, mas tentarei te ajudar.

function utf8_converter($array)
{
array_walk_recursive($array, function(&$item, $key){
    if(!mb_detect_encoding($item, 'utf-8', true)){
            $item = utf8_encode($item);
    }
});

return $array;
}

Nesse método, você chamando e colocando seu array dentro do parâmetro ele faz um loop no seu array através de cada elemento e converte para UTF-8. Na maioria das vezes pode funcionar, porém há exceções. Espero ter ajudado.

Answered by fabionvs on December 30, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP