У меня есть javascript, который отправляет данные в JSON через формат POST в PHP-скрипт.
С "обычными" символами все работает нормально, но я вижу несоответствия при использовании, например, гласных с ударениями типа "а". Я хотел бы спросить, есть ли у кого-нибудь предложения о том, как это исправить.
Это Javascript:
$.ajax({
contentType: 'application/json',
data: JSON.stringify({
"action": params.action,
"username": params.username,
"page": params.page,
}),
processData: false,
//dataType: 'json',
url: "/w/ImolaCustom/SudoAutoedit.php",
type: 'POST',
success: function(data) {
...
}
});
На стороне PHP я делаю это:
$theData = json_decode(file_get_contents('php://input')), true);
Проблема возникает, если я отправлю что-то вроде:
params.page = "Società sportiva Bridge";
поскольку $theData['page'] становится "Societ\xc3\xa0 sportiva Bridge"
Если я использую utf8_decode($theData['page']) (или если я использую его в строке, переданной из php://input до json_decoding, вместо этого я получаю «Societ\xe0 sportiva Bridge».
Я пробовал различные функции преобразования, такие как iconv(), mb_convert_variables() и mb_convert_encoding(), для преобразования из UTF-8 в ISO-8859-1 с теми же результатами, что и выше.
Я также пробовал кодировать строку на стороне клиента с помощью encodeURIComponent() или escape(). PHP получает правильную строку (соответственно "Societ%C3%A0%20sportiva%20Bridge" и "Societ%E0%20sportiva%20Bridge"), но после декодирования с помощью rawurldecode() я все равно получаю "Societ\xc3\xa0 sportiva Bridge" и "Societ\xe0 sportiva Bridge" соответственно.
Оба файла находятся на компьютере с CentOS и сохраняются с преобразованием EOL в режиме UNIX и с кодировкой набора символов, установленной на UTF-8 (редактор — notepad++).
contentType: 'application/json; charset=utf-8'
! UTF-8 должен обрабатывать все акценты. - person Ismail RBOUH   schedule 27.07.2016console.log(JSON.stringify({ "action": params.action, "username": params.username, "page": params.page, }))
, чтобы определить, проблема в серверной или внешней части? - person RaV   schedule 27.07.2016