Preso em Jquery Ajax Db Codificação para ISO-8859-9 Charset

Estou tentando transmitir dados para o db através do meu aplicativo JQuery. Tenho sérios problemas com a codificação.

A codificação da página atual é iso-8859-9. Eu fiz minha codificação de página do ajax para iso-8859-9 e passando dados .ajax com contentType: "application/x-www-form-urlencoded;charset=ISO-8859-9"

Ele armazena o valor İZİN como Ä°ZÄ°N com cada tentativa.

Isso funciona se eu criar uma página PHP e definir codificação com headers?

PS: Estou processando dados em uma página HTML. A página do processador é uma página ASP e usando o MsSQL db, eu acho. Eu não tenho access à página do processador ou db. Apenas digitando dados via formulário post.

A palavra İZİN e algumas outras palavras similares estão usando a consulta sql em algumas outras páginas nas cláusulas WHERE. Então não consigo converter caracteres em códigos HTML. Eu tenho que usar İ como ©.

Obrigado por sugestões!

O application/x-www-form-urlencoded não possui um charset. É simplesmente caracteres ASCII. Especificar charset não irá fazer nada.

jQuery normalmente irá identificar seus dados conforme especificado :

  1. Codificar para UTF-8
  2. Códice percentual

Assim:

 $.post( "test.php", {data: 'İZİN'}); //Shorthand for $.ajax 

Atualmente, publica isso no servidor:

 data=%C4%B0Z%C4%B0N 

Quando você acessa $_POST['data'] com php, eles foram transformados em bytes ( 0xC4B05AC4B04E ), então, ecoando-os, você fornecerá dados malformados:

 header("Content-Type: text/html; charset=ISO-8859-9"); echo $_POST['data']; // Ä°ZÄ°N 

Você pode testar isso é verdade com:

 header("Content-Type: text/html; charset=ISO-8859-9"); echo "\xC4\xB0\x5A\xC4\xB0\x4E"; // Ä°ZÄ°N 

No PHP você precisa convertê-lo para o ISO-8859-9 assim que você o receber:

  

Observe que é muito mais fácil usar UTF-8 em todos os lugares porque é praticamente a melhor codificação e a web adora. Se você usar qualquer outra codificação, então você terá que estar nos dedos dos pés o tempo todo.

Parece que o problema é que a página de access não suporta utf-8.
Eu não sou estranho a palavra İZİN e sua versão gibberish Ä°ZÄ°N Provavelmente é devido à página de códigos.

De JQuery.ajax ()

Os dados POST serão sempre transmitidos para o servidor usando o caractere UTF-8, de acordo com o padrão W3C XMLHTTPRequest.

Então, em suas configurações do ajax, a definição do charset foi ignorada.

Você precisa acessar a página que você chamou de página do processador. Deve ter a página de códigos utf-8 (65001).

Como temporariamente no lado do cliente, você pode replace letras codificadas em UTF-8 como dois bytes com o formulário de byte único esperado antes de enviar dados.

 function tr_map(data){ var tr_data = data; var chrmap = { "%C3%B6" : "%F6", //ö "%C3%A7" : "%E7", //ç "%C5%9F" : "%FE", //ş "%C4%B1" : "%FD", //ı "%C4%9F" : "%F0", //ğ "%C3%BC" : "%FC", //ü "%C3%96" : "%D6", //Ö "%C3%87" : "%C7", //Ç "%C5%9E" : "%DE", //Ş "%C4%B0" : "%DD", //İ "%C4%9E" : "%D0", //Ğ "%C3%9C" : "%DC" //Ü }; for (var chr in chrmap) if(chrmap.hasOwnProperty(chr)) tr_data = tr_data.split(chr).join(chrmap[chr]); return tr_data; } $.ajax({ url: "...", type: "POST", data: $("#myform").serialize(), /* other settings success : ... */ beforeSend: function(x, s){s.data = tr_map(s.data);} });