Ответ 1
Я разрешаю его в PHP со следующей строкой:
foreach($_POST as $key => $value) {
$_POST[$key] = utf8_decode($value);
}
У меня есть веб-приложение (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() работает не так, как ожидалось?
Я разрешаю его в PHP со следующей строкой:
foreach($_POST as $key => $value) {
$_POST[$key] = utf8_decode($value);
}
jQuery.get
как и все функции jQuery ajax используют encodeURIComponent
для данных.
Если вы отправляете данные через GET, XHR автоматически позаботится о передаче кодировки URL-адресов.
Вы можете просмотреть документацию encode
, чтобы узнать, какой тип кодировки подходит для отправляемых вами данных.
У меня была аналогичная проблема с IE. Я добавил в javascript pageload следующее:
$.ajaxSetup({
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
});
Казалось, что он решил проблему с большинством символов.
Вы должны добавить следующий метатег в начало как начальной, так и принимающей страницы:
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
По умолчанию страница будет отображаться в utf-8. Если это не работает, вы можете использовать encodeURIComponent()
в дополнение к кодированию символов при отправке. Если необходимо, чтобы на принимающей стороне, если кодировка не была автоматически декодирована, запустите decodeURIComponent()
.
Serialize не работает с символами IE и ISO-8859-1.
См. http://forum.jquery.com/topic/serialize-problem-with-latin-1-iso-8859-1-and-solution
Я также добавляю тест
if( $.browser.msie )
Потому что в FF работает, и этот хак не работает.