Ir para conteúdo

Arquivado

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

gabrielfalieri

Filtro não funciona por causa de problema de acentuação do retorno, o que fazer?

Recommended Posts

Bom dia galera do imasters.

Eu estou trabalhando com datatables e php, de forma server side.

Venho fazendo filtros personalizados com ele, tudo funcionando ok, com uma salve exceção, as palavras que tem acentuação, não funciona no filtro.

Vamos dizer, que eu seleciono a seguinte empresa: XPTO serviços

Quando for fazer o filtro do "Gabriela e Ana informática" ele vai dizer que a tabela está vazia. Não entendendo o erro, reparei que isso só acontecia com palavras que tinham acentuação, então eu olhei como estava o retorno. Foi constatado que o retorno do datatable, estava vindo com algo do tipo 

["XPTO servi\u00e7os","Sociedade Unificada de Ensino Augusto Motta-UNISUAM, BR\r\n","EDUCATIONAL\r\n","MF\r\n","16\r\n","01\/06\/2016","25\/03\/2017","25\/03\/2017","2\r\n","1000\r\n","<a href='detail-license.php?id=14'><button class='btn btn-success'><i class='fa fa-list'><\/i> Detalhes<\/button><\/a>","<a href='download.php?id=14'><button class='btn btn-success'><i class='fa fa-download'><\/i> Download<\/button><\/a>"],["XPTO servi\u00e7os","Moinho Romariz Ind. Com. Imp. de Prod. Alimenticios LMDA, BR","COMMERCIAL","MF","15","08\/09\/2015","08\/09\/2016","08\/09\/2016","2","100","<a href='detail-license.php?id=20'><button class='btn btn-success'><i class='fa fa-list'><\/i> Detalhes<\/button><\/a>","<a href='download.php?id=20'><button class='btn btn-success'><i class='fa fa-download'><\/i> Download<\/button><\/a>"],["XPTO servi\u00e7os","ibsolution - austral - cedserj - cond bnds","COMMERCIAL","NG","16","29\/06\/2016","05\/05\/2017","05\/05\/2017","2","150","<a href='detail-license.php?id=23'><button class='btn btn-success'><i class='fa fa-list'><\/i> Detalhes<\/button><\/a>","<a href='download.php?id=23'><button class='btn btn-success'><i class='fa fa-download'><\/i> Download<\/button><\/a>"]

 

Esse "servi\u00e7os" que está me jogando pro buraco.

 

//codigo que faz o retorno do json

 $data = array();
    while( $row=mysql_fetch_array($rResult) ) {  // preparing an array
        $nestedData=array();


        $nestedData[] = utf8_encode($row["razao_social"]);
        $nestedData[] = utf8_encode($row["organization_name"]);
        $nestedData[] = $row["organization_type"];
        $nestedData[] = $row["edition"];
        $nestedData[] = $row["licensed_version"];
        $nestedData[] = date("d/m/Y",strtotime($row["issued_date"]));
        $nestedData[] = date("d/m/Y",strtotime($row["support_expiry_date"]));
        $nestedData[] = date("d/m/Y",strtotime($row["updates_expiry_date"]));
        $nestedData[] = $row["advanced_clients_licensed"];
        $nestedData[] = $row["users_licensed"];
        $nestedData[] = "<a href='detail-license.php?id=".$row['id_license']."'><button class='btn btn-success'><i class='fa fa-list'></i> Detalhes</button></a>";
        $nestedData[] = "<a href='download.php?id=".$row['id_license']."'><button class='btn btn-success'><i class='fa fa-download'></i> Download</button></a>";
        $data[] = $nestedData;
    }

    $output = array(
        "draw" => intval($_GET['draw']),
        "recordsTotal" => $iTotal,
        "recordsFiltered" => $iFilteredTotal,
        "data" => $data
    );

    echo json_encode( $output );

 

//codigo que pega as informações do formulario e envia para o php

 

  $('#btnFiltrar').on( 'click', function () {



            var dados = new Array();

            $('#frmReportLicense').find(":text:visible,:checkbox:checked,select:visible,input:checked").each(function(v) {
                dados[v] = $(this).val();
            });

            dataTable.columns().search(dados).draw();

            console.log(dados);

        } );

 

 

chrome_2017-05-10_10-24-45.png

chrome_2017-05-10_10-31-17.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

o seu banco de dados está em formato utf-8_general_ci? a mesma coisa para a tabela e campos strings? passou essa formatação na conexão também? a página também está formatada pra utf-8? já pesquisou as opções do mysql pra retornar os dados independente de estar acentuado ou não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tu não postou a query select que tá usando mas tenta botar isso na frente da condição

 

... WHERE campo condicao collate utf8_general_ci

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja esse exemplo e ente o mesmo:

$response = array(
    'letra' => 'ç'
);

echo json_encode($response);
// resultado: {"letra":"\u00e7"}

echo json_encode($response, JSON_UNESCAPED_UNICODE);
// resultado: {"letra":"ç"}

Obs: Retire o utf8_encode dos campos, e confirme se no banco as letras estão de fato sendo salvas com acentuação, ou com outro caractere representativo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como é filtro dinâmico, não tem query definida, 

 

mas gera algo do tipo:

 SELECT SQL_CALC_FOUND_ROWS razao_social, organization_name, organization_type, edition, licensed_version, issued_date, support_expiry_date, updates_expiry_date, users_licensed, advanced_clients_licensed, id_license, ativo
        FROM  license_report_views WHERE ativo = 1
         AND razao_social = 'Gabriela e Ana Informática Ltda' AND users_licensed BETWEEN 5 AND 1000
        ORDER BY  razao_social
                    asc
        LIMIT 0, 10

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
$output = array(
    "draw" => intval($_GET['draw']),
    "recordsTotal" => $iTotal,
    "recordsFiltered" => $iFilteredTotal,
    "data" => $data
);
echo json_encode( $output, JSON_UNESCAPED_UNICODE );

colocando ele, o retorno do json vem até certo, porém não filtra

chrome_2017-05-10_14-10-09.png

chrome_2017-05-10_14-10-45.png

 

 

SELECT SQL_CALC_FOUND_ROWS razao_social, organization_name, organization_type, edition, licensed_version, issued_date, support_expiry_date, updates_expiry_date, users_licensed, advanced_clients_licensed, id_license, ativo
        FROM  license_report_views WHERE ativo = 1
         AND razao_social = 'XPTO serviços' AND users_licensed BETWEEN 5 AND 1000
        ORDER BY  razao_social
                    asc
        LIMIT 0, 10

Minha query resultou isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Remove os ut8_encode() dos :

 

<?php
$nestedData[] = utf8_encode($row["razao_social"]);
$nestedData[] = utf8_encode($row["organization_name"]);

 

Verifique se sua conexão com o banco está setada pra utf8, não só no banco, mas na conexão.

 

Passei por algo parecido isso com outro plugin hoje/ontem, foi só setar a conexão, no banco estava utf8 mas a conexão não estava.

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

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