2010-01-05 14 views
12

Mam aplikacji WWW (UTF-8), w których jeden może być używany do wysyłania na stronie serweraKodowanie zestawów wykresów podczas korzystania z Ajax? JQuery

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

Ok następujący. Używam coś w następujący sposób wysyłania danych

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

}); 

Kiedy widzę moje rekordów, ja dostać (kodowanie charSet bazie jest UTF-8)

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

Nawet przy użyciu $ .post, otrzymuję Taki sam wynik ustawić

Po obejrzeniu metody serialize() w JQuery w działania książki:

Tworzy pro perly sformatowany i zakodowany ciąg zapytania ze wszystkich udanych elementów formularza w opakowaniu owiniętym

Jednak, jak pokazano powyżej, nie wydaje się działać dobrze. Więc zamiast metody serializacji(), używam

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) { 

}); 

Teraz ja dostać w bazie

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

więc jestem brakuje czegoś przy użyciu metody serialize()? Dlaczego metoda serialize() nie działa zgodnie z oczekiwaniami?

Odpowiedz

3

jQuery.get podobnie jak wszystkie funkcje jQuery ajax używają encodeURIComponent dla danych. Jeśli wysyłasz dane przez GET, XHR automatycznie zajmuje się przekazywaniem kodowania adresów URL. można zobaczyć dokumentację encode, aby zobaczyć, jaki rodzaj kodowania jest odpowiedni dla danych wyślesz

0

Należy dodać następujący tag meta na głowę zarówno inicjowanie i otrzymującego stronie:

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

Będzie to domyślna strona do renderowania zawartości w utf-8. Jeśli to nie zadziała, możesz użyć kodu encodeURIComponent(), a także zakodować znaki podczas wysyłania. Jeśli zajdzie taka potrzeba, jeśli kodowanie nie zostanie automatycznie zdekodowane, uruchom decodeURIComponent().

4

rozwiązać go w PHP z następującą linię:

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

To mi bardzo pomogło! – kanarifugl

1

Miałem podobny problem z IE.Dodałem do pageload javascript:

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

Co wydawało się rozwiązać problem z większością znaków.

+0

korzystanie z ajaxSetup jest odradzane (https://api.jquery.com/jquery.ajaxsetup/). , ale contentType można przekazywać bezpośrednio w wywołaniu $ .ajax(). dla mnie ta odpowiedź była pomocna, ponieważ zdarzenie, jeśli żądanie ajax jest poprawnie zakodowane w ut8, zwane może nie rozumieć, że jego utf8 – Nightingale7

Powiązane problemy