Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá!
Estou com o seguinte problema.
Tenho um formulário que estou fazendo o post dele por ajax, com a seguinte função:
function postForm(form, onde) {
data = new FormData(form);
$.ajax({
type: 'POST',
url: form.action,
data: data,
cache: false,
contentType: false,
processData: false
}).done(function(data) {
$('#'+onde).html(data);
}).fail(function(jqXHR,status, errorThrown) {
$('#'+onde).html('Erro!');
console.log(errorThrown);
console.log(jqXHR.responseText);
console.log(jqXHR.status);
});
}
Porém quando o dado com acentuação chega ao PHP, ele não consegue interpretar o acento.
Já tentei mudar o parâmetro contentType de algumas formas, mas não funcionou.
A única forma que consegui fazer funcionar foi colocando um utf8_decode() na variável do POST recebida pelo PHP. Porém desta forma dá muita mão de obra pois são vários formulários e vários campos, além de deixar o código sujo e piorar a performance.
Existe alguma forma mais simples de corrigir isso?
No arquivo PHP está com o header("Content-type: text/html; charset=iso-8859-1");
E o encoder da página é <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
Muito obrigado!!!
Sim, trabalhe sempre em tudo com utf8.
Olá.
Desculpe a demora para responder, mas acabei voltando a verificar esse problema somente agora.
Eu adotei o utf-8 e aparentemente funcionou legal.
Vou colocar aqui os pontos que eu me depraei.
DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
mysqli_query($mysqli, "SET NAMES 'utf8'");
mysqli_query($mysqli, 'SET character_set_connection=utf8');
mysqli_query($mysqli, 'SET character_set_client=utf8');
mysqli_query($mysqli, 'SET character_set_results=utf8');
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="charset" content="utf-8" />
header("Content-type: text/html; charset=utf-8");
utf8_encode($comandos);
Se tiver alguma sugestão para diminuir este impacto de alterações, por favor postem aqui.
Até agora não notei problemas de performance. Mas ainda estou com medo disso. (rs)
Muito obrigado pela ajuda, pessoal!
Abraço.
Boa noite... como você mesmo disse no ajax tem a opção:
contentType
encoding:"UTF-8",
Olha pelo que andei lendo algum tempo atras, me corrijam se estiver errado:
A ISO-8859-1, é uma boa opção de uso para nós brasileiros, mas tem o UTF-8 que é mais global, mas 1 caracter pode ter até 4 bytes... podendo aumentar o tamanho da aplicação... consumo de rede etc
Para não ter problemas:
Você tem que especificar a o cabeçalho da página:
<meta charset="utf-8" />
E quando cria os arquivos, em preferência, você também deve especificar como UTF-8...
o arquivo deve ser salvo na codificação UTF8
No banco de dados, você especifica:
A tabela se não me engano:
Utf8_general_ci
E depois pode especificar cada coluna com o mesmo:
Utf8_general_ci
Não sei em relação ao Ajax, mas que podemos ver ele já utiliza UTF-8...
Veja um exemplo:
>
Ao invés de Canção, ele exibe Can��o ou Canção.
No primeiro caso (Can��o), sua página em ISO-8859-1 está obtendo a palavra Canção armazenada em UTF-8 da origem, seja ela do banco de dados ou de um XML, txt etc.
Já o segundo caso (Canção) é a sua página em UTF-8 exibindo a palavra Canção armazenada em ISO-8859-1 da origem.