Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Faço uma consulta em várias tabelas e armazeno o resultado em um array...
Essa consulta é feita através de uma requisição AJAX na codificação UTF-8, minha página está em ISO-8859-1 e a tabela em que busco os resultados está em Latin1_General_CI_AS (que pelo que encontrei no Google seria o mesmo que ISO-8859-1)...
Bom, alguns resultados possuem caracteres especiais (ã, á, ç...), como a requisição AJAX é feita em UTF-8, bastaria eu colocar utf8_encode($resultado['campo_caracter_especial'] e tudo estaria resolvido... Mas, não funcionou... tentei buscar outras soluções -> iconv("ISO-8859-1", "UTF-8//TRANSLIT" , $resultado['campo_caracter_especial'])... Também não funcionou, tentei também -> mb_convert_encoding($resultado['campo_caracter_especial'], "UTF-8", "ISO-8859-1"), todas essas soluções eu também inverti os valores (onde estava UTF-8 coloquei ISO-8859-1 e vice-versa...).
Depois de todas essas tentativas frustadas encontrei a função mb_detect_encoding(), que me retornou ASCII como charset do resultado... Tentei todas as soluções anteriores substituindo "ISO-8859-1" por "ASCII" e ainda assim nada mudou... Onde deveria retornar INFORMÁTICA, me retorna INFORM?TICA...
Por favor... alguém me ajude :'(
Segue o código:
<?php
$reg = odbc_fetch_array($funcionarios);
$setor = $reg['setor'];
$dados['setor'] = trim($setor);
//A consulta está perfeita, porque os resultados sem caracteres especiais retornam perfeitamente...
?>
Se os caracteres "especiais" não aparecem numa depuração rápida do programa PHP, boas chances de o problema ser na comunicação entre o cliente e o servidor.
Anos atrás eu defini um atributo HTML charset na tag <script> a qual eu invocava o arquivo JavaScript externo para refletir com o programa PHP e foi suficiente para resolver.
Algumas vezes não resolve e você pode remediar enviando um cabeçalho Content-type COM o charset antes de ecoar aquilo que será interpretado pelo JavaScript.
Mas isso tudo são medidas paliativas. COmo sugerido pelo rockrgo, o ideal é padronizar tudo desde o chraset do arquivo PHP físico até o collation do banco de dados.
Desde já, obrigado...
Este é o grande problema, não posso mudar a codificação do banco de dados... Pois o banco de dados não e meu, entende?
Também não posso editar esses valores (isto é, tirar os caracteres especiais e substitui-los por outros), alterei agora a pouco o tipo do arquivo PHP (que estava em ANSI e passei para UTF8 e depois para UTF8 without BOM), mas nada resolveu...
Não consigo encontrar uma solução para isso :[
Em minha página principal, que é chamada por todas as outras páginas, há:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
header("Content-Type: text/html; charset=ISO-8859-1", true);
A requisição AJAX é a seguinte:
$.ajax({
url : 'campos_atraso.php', // URL que será chamada //
type : 'POST', // Tipo da requisição //
data: 'nome=' + $(this).val(), // dado que será enviado via POST //
dataType: 'json', // Tipo de transmissão //
success: function(data){
if(data.sucesso == 1){
$('#matricula').val(data.matricula);
$('#nome').val(data.nome);
$('#id_funcionario').val(data.id_funcionario);
$('#setor').val(data.setor);
$('#cargo').val(data.cargo);
$('#ramal').val(data.ramal);
}
return false;
}
});
Cara deixa tudo utf8 que funciona corretamente. Meu html deixo como utf-8 e o banco de dados como utf8_general_ci e não tenho problemas com acentuação.