У меня есть следующий PHP-скрипт, вызываемый AJAX:
<?php
// file /ajax/loopback.php
$fp = fopen("php://input","r");
$pdt = "";
while(!feof($fp)) $pdt .= fgets($fp);
fclose($fp);
$_POST = json_decode($pdt,true);
if( !$_POST) $_POST = Array();
var_dump($_POST);
exit;
?>
Затем я вызываю этот скрипт со следующим JavaScript:
AJAX = function(url,data,callback) {
var a = new XMLHttpRequest();
if( data) {
data = JSON.stringify(data);
}
a.open("POST","/ajax/"+url,true);
a.onreadystatechange = function() {
if( a.readyState == 4) {
if( a.status == 200) {
callback(JSON.parse(a.responseText));
}
}
};
a.setRequestHeader("Content-Type","application/json");
a.send(data);
};
AJAX("loopback.php",{name:'ヴィックサ'},alert);
Ожидаемый результат - окно предупреждения, содержащее:
Array(1) {
["name"]=>
string(5) "ヴィックサ"
}
(или, возможно, "string (10)" из-за многобайтовых символов)
Но результат, который я получаю:
Array(1) {
["name"]=>
string(5) "?????"
}
Чего мне не хватает, чтобы символы Юникода передавались через AJAX?
РЕДАКТИРОВАТЬ: Я добавил некоторый код, чтобы показать мне, что необработанные данные поста, и кажется, что ?????
есть в необработанных данных поста, т.е. Юникод даже не доходит до сервера.