Кодировка Chartset при использовании Ajax? JQuery - PullRequest
12 голосов
/ 05 января 2010

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

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

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

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

});

Когда я вижу свой набор записей, я получаю (кодировка базы данных 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 () не работает должным образом?

Ответы [ 5 ]

5 голосов
/ 14 февраля 2011

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

foreach($_POST as $key => $value) {
    $_POST[$key] = utf8_decode($value);
}
3 голосов
/ 05 января 2010

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

1 голос
/ 25 марта 2015

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

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

Что, похоже, решило проблему с большинством символов.

0 голосов
/ 21 июня 2011

Сериализация не работает с символами IE и ISO-8859-1.

См. http://forum.jquery.com/topic/serialize-problem-with-latin-1-iso-8859-1-and-solution

Я тоже добавляю тест

if( $.browser.msie )

Потому что в FF работает и этот хак не работает.

0 голосов
/ 05 января 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...