Ir para conteúdo

Arquivado

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

Gustavo VdeM

Problemas com acento em post de form por ajax

Recommended Posts

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!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, trabalhe sempre em tudo com utf8.

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.


- Criei o banco de dados com:

DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;


- Na conexão com o banco de dados eu utilizei:

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');


- No cabeçalho do html utilizei:

<meta http-equiv="content-type" content="text/html;charset=utf-8" />

<meta name="charset" content="utf-8" />


- Nos arquivos chamados pelo ajax tive que utilizar:

header("Content-type: text/html; charset=utf-8");


- Na funcionalidade que implementei para backup do banco utilizei:

utf8_encode($comandos);


- Tive que converter todos os arquivos (php, html, js, css, etc...) para codificação utf-8.


- Tive problemas com essa conversão porque converti para UTF-8 sem utilizar aquele "sem BOM", o que gerava um espaço em branco nos includes.


- Tive problemas com o htmlentities também. E a solução foi usar htmlspecialchars($valor, ENT_QUOTES, "UTF-8");


- Também tive problemas com algumas classes css (não sei se tem a ver), que depois que alterei isso, elas não pegaram o font-size da classe pai e tive que forçar o valor.



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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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