Подтвердить что ты не робот

Шифрование кодировки при использовании Ajax? JQuery

У меня есть веб-приложение (UTF-8), в котором для отправки на сервер можно использовать следующую команду

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

Ok. Для отправки данных я использую что-то вроде следующего:

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

});

Когда я вижу свой recordSet, я получаю (кодировка charSet базы данных - UTF-8)

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

Даже при использовании $.post я получаю тот же набор результатов

После просмотра метода serialize() в JQuery в книге действий:

Создает правильно отформатированную и закодированную строку запроса из всех успешных элементов формы в завернутом наборе

Но, как показано выше, он не работает нормально. Поэтому вместо метода serialize() я использую

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

});

Теперь я получаю в базе данных

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

Итак, я что-то теряю при использовании метода serialize()? Почему метод serialize() работает не так, как ожидалось?

4b9b3361

Ответ 1

Я разрешаю его в PHP со следующей строкой:

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

Ответ 2

jQuery.get как и все функции jQuery ajax используют encodeURIComponent для данных. Если вы отправляете данные через GET, XHR автоматически позаботится о передаче кодировки URL-адресов. Вы можете просмотреть документацию encode, чтобы узнать, какой тип кодировки подходит для отправляемых вами данных.

Ответ 3

У меня была аналогичная проблема с IE. Я добавил в javascript pageload следующее:

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

Казалось, что он решил проблему с большинством символов.

Ответ 4

Вы должны добавить следующий метатег в начало как начальной, так и принимающей страницы:

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

По умолчанию страница будет отображаться в utf-8. Если это не работает, вы можете использовать encodeURIComponent() в дополнение к кодированию символов при отправке. Если необходимо, чтобы на принимающей стороне, если кодировка не была автоматически декодирована, запустите decodeURIComponent().