2010-01-05 29 views
12

Ho un'applicazione web (UTF-8), in cui il seguente uno può essere utilizzato per inviare al lato serverCodifica Chartset quando si utilizza Ajax? JQuery

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

Ok. Io uso qualcosa di simile come segue per inviare i dati

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

}); 

quando vedo il mio set di record, ottengo (codifica charset database è UTF-8)

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

Anche quando si utilizza $ .post, ottengo il stesso risultato impostato

Dopo aver visto il metodo serialize() in jQuery in azione libro:

Crea un professionista perly formattato e codificato stringa di query da tutti gli elementi del modulo successo nel set avvolto

Ma, come indicato sopra, non sembra funzionare bene. Così, invece di metodo serialize(), io 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) { 

}); 

Ora ho in banca dati

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

Così mi sto perdendo qualcosa quando si utilizza il metodo serialize()? Perché il metodo serialize() non funziona come previsto?

risposta

3

jQuery.get come tutte le funzioni jQuery ajax utilizzare encodeURIComponent per i dati. Se si inviano dati tramite GET, XHR si occupa automaticamente del passaggio della codifica degli URL. È possibile visualizzare la documentazione di encode per vedere quale tipo di codifica è adatto per i dati inviati

0

è necessario aggiungere il seguente meta tag per il capo sia del iniziatore e la pagina che riceve:

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

Questo imposterà la pagina per il rendering del contenuto in utf-8. Se ciò non funziona, è possibile utilizzare encodeURIComponent() oltre a codificare i caratteri durante l'invio. Se necessario, se la codifica non viene decodificata automaticamente, eseguire decodeURIComponent().

4

risolvo in PHP con la seguente riga:

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

Questo mi ha aiutato molto! – kanarifugl

1

Ho avuto un problema simile con IE.Ho aggiunto a pageload javascript il seguente:

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

Quale sembrava risolvere il problema con la maggior parte dei caratteri.

+0

L'uso di ajaxSetup è sconsigliato (https://api.jquery.com/jquery.ajaxsetup/). ma contentType può essere passato direttamente nella chiamata $ .ajax(). per me questa risposta è stata utile, perché l'evento se la richiesta Ajax è codificata correttamente in ut8, chiamata potrebbe non capire che il suo utf8 – Nightingale7

Problemi correlati