AJAX-запрос, возвращающий символы Юникода в виде вопросительных знаков - PullRequest
2 голосов
/ 08 января 2012

У меня есть следующий 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?

РЕДАКТИРОВАТЬ: Я добавил некоторый код, чтобы показать мне, что необработанные данные поста, и кажется, что ????? есть в необработанных данных поста, т.е. Юникод даже не доходит до сервера.

1 Ответ

0 голосов
/ 08 января 2012

На вашей странице, которая имеет JavaScript (или загружает файл JavaScript), вы устанавливаете кодировку в UTF-8?

header('Content-Type:text/html; charset=UTF-8');

Попробуйте посмотреть свой скрипт в Firebug и убедитесь, чтосимволы в этой строке ...

AJAX("loopback.php",{name:'ヴィックサ'},alert); 

в исходном файле выглядят так же, как и в отладчике.

(по крайней мере, я пробовал ваш скрипт, и он работал нормально для менякак только я установлю кодировку символов.)

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