Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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);
} );

ta tudo utf8 sim
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
Veja esse exemplo e ente o mesmo:
$response = array(
'letra' => 'ç'
);
echo json_encode($response);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
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, 10JSON_UNESCAPED_UNICODE
echo json_encode( $output, JSON_UNESCAPED_UNICODE);
[http://php.net/manual/pt_BR/json.constants.php](http://php.net/manual/pt_BR/json.constants.php)
[http://php.net/manual/pt_BR/function.json-encode.php](http://php.net/manual/pt_BR/function.json-encode.php)$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


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 issoO que é esse $iFilteredTotal? onde e como é defenido
json_encode nao vai alterar o seu select pq ele é feito depois
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.
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?