2010-01-05 34 views
12

I tiene una aplicación web (UTF-8) en el que la siguiente se puede utilizar para enviar al lado del servidorCodificación cartográfica cuando se usa Ajax? JQuery

áéíóú 
àèìòù 
ÀÈÌÒÙ 
ÁÉÍÓÚ 

Ok. Utilizo algo como la siguiente manera para enviar datos

// Notice $("#myForm").serialize() 
$.get("/path?", $("#myForm").serialize(), function(response) { 

}); 

cuando veo a mis registros, me sale (base de datos de codificación charset UTF-8)

áéíóú 
à èìòù 
ÃÉÃÓÚ 
ÀÈÌÒÙ 

Incluso cuando se utiliza $ .post, me sale el mismo conjunto de resultados

Después de ver el método serialize() en jQuery en acción libro:

Crea un profesional perly formateado y codificado cadena de consulta de todos los elementos de formulario con éxito en el conjunto envuelto

Pero, como se muestra arriba, no parece funcionar bien. método serialize() Así que en lugar de, yo uso

var objectArray = $("#myForm").serializeArray(); 

var queryString = ""; 
for(var i = 0; i < objectArray.length; i++) { 
    queryString += "&" + objectArray[i]["name"] + "=" + objectArray[i]["value"]; 
} 

$.get("/path?" + queryString, null, function(response) { 

}); 

Ahora me sale en la base de datos

áéíóú 
àèìòù 
ÀÈÌÒÙ 
ÁÉÍÓÚ 

así que me estoy perdiendo algo cuando se utiliza el método serialize()? ¿Por qué el método serialize() no funciona como se esperaba?

Respuesta

3

jQuery.get como todas las funciones jQuery ajax use encodeURIComponent para los datos. Si envía datos a través de GET, el XHR automáticamente se ocupa de pasar la codificación de las URL. Puede ver la documentación de encode para ver qué tipo de codificación es adecuado para los datos que envía

0

se debe añadir la siguiente etiqueta meta en la cabeza tanto de la iniciación y la página de recepción:

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

Esto predeterminará la página para mostrar contenido en utf-8. Si esto solo no funciona, puede usar encodeURIComponent() además de codificar los caracteres al enviar. Si es necesario en el extremo receptor si la codificación no se decodifica automáticamente, ejecute decodeURIComponent().

4

resuelvo en PHP con la siguiente línea:

foreach($_POST as $key => $value) { 
    $_POST[$key] = utf8_decode($value); 
} 
+1

¡Esto me ayudó mucho! – kanarifugl

1

Tuve un problema similar con IE.He añadido a pageload Javascript a lo siguiente:

$.ajaxSetup({ 
     contentType: "application/x-www-form-urlencoded; charset=UTF-8" 
}); 

que parecía resolver el problema con la mayoría de los caracteres.

+0

se desaconseja el uso de ajaxSetup (https://api.jquery.com/jquery.ajaxsetup/). pero contentType se puede pasar directamente en $ .ajax() llamada. para mí esta respuesta fue útil, porque evento si la solicitud de ajax está codificada correctamente en ut8, puede que no entienda que es utf8 – Nightingale7

Cuestiones relacionadas