Atascado en Jquery Ajax Db Codificación para ISO-8859-9 Charset

Estoy tratando de pasar datos a db a través de mi aplicación Jquery. Tengo serios problemas con la encoding.

La encoding de la página actual es iso-8859-9. He hecho mi encoding de página AJAX para iso-8859-9 y paso datos .ajax con contentType: "application/x-www-form-urlencoded;charset=ISO-8859-9"

İZİN valor de İZİN como Ä°ZÄ°N con cada bash individual.

¿Funciona si creo una página PHP y establezco la encoding con los encabezados?

PD: estoy procesando datos en una página HTML. La página del procesador es una página ASP y el uso de MsSQL db, supongo. No tengo acceso a la página del procesador o db. Simplemente ingresando datos a través de la publicación del formulario.

La palabra İZİN y algunas otras palabras similares se utilizan para la consulta sql en algunas otras páginas en cláusulas WHERE. Entonces no puedo convertir personajes en códigos HTML. Tengo que usar İ como İ.

Gracias por las sugerencias!

La application/x-www-form-urlencoded no tiene un application/x-www-form-urlencoded caracteres. Simplemente son caracteres ASCII. Especificar juego de caracteres no hará nada.

jQuery normalmente urlencode sus datos como se especifica :

  1. Codificar a UTF-8
  2. Codificación porcentual

Asi que:

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

En realidad, publica esto en el servidor:

 data=%C4%B0Z%C4%B0N 

Cuando accedes a $_POST['data'] con php, se han convertido en bytes ( 0xC4B05AC4B04E ), por lo que si te haces eco obtendrás datos mal formados:

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

Puedes probar que esto es cierto con:

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

En PHP necesitas convertirlo a ISO-8859-9 tan pronto como lo recibas:

  

Tenga en cuenta que es mucho más fácil usar UTF-8 en todas partes porque es prácticamente la mejor encoding y la web lo adora. Si usa cualquier otra encoding, tendrá que estar alerta todo el tiempo.

Parece que el problema es que la página de acceso no admite utf-8.
No soy ajeno a la palabra İZİN y su versión Ä°ZÄ°N Lo más probable es que se deba a la página de códigos.

De JQuery.ajax ()

Los datos POST siempre se transmitirán al servidor utilizando el conjunto de caracteres UTF-8, según el estándar W3C XMLHTTPRequest.

Entonces, en su configuración de ajax, la definición del conjunto de caracteres se ignora.

Necesita acceder a la página que llamó como página del procesador. Debe tener una página de códigos utf-8 (65001).

Como temporalmente en el lado del cliente, puede reemplazar las letras codificadas en UTF-8 como dos bytes con la forma esperada de un solo byte antes de enviar datos.

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