【问题标题】:AJAX request returning unicode characters as question marksAJAX 请求返回 Unicode 字符作为问号
【发布时间】:2012-02-05 04:38:19
【问题描述】:

我有以下被 AJAX 调用的 PHP 脚本:

<?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) "ヴィックサ"
}

(或者由于多字节字符可能是“字符串(10)”) 但我得到的结果是:

Array(1) {
    ["name"]=>
    string(5) "?????"
}

允许通过 AJAX 传递 Unicode 字符我缺少什么?

编辑:我添加了一些代码来向我展示原始帖子数据是什么,看起来????? 似乎存在于原始帖子数据中,即。 Unicode 甚至没有进入服务器。

【问题讨论】:

  • 是的,我试过有没有。不过没关系……
  • 如果不使用 AJAX 直接调用文件,输出是否相同 - 问号?
  • 如果我尝试通过form 提交该数据,则生成的字符串长度为 40 个字符,一组五个 HTML 实体 (&amp;#_____;)

标签: php javascript ajax json unicode


【解决方案1】:

在您的包含 JavaScript(或正在加载 JavaScript 文件)的页面上,您是否将字符集设置为 UTF-8?

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

尝试在 Firebug 中查看您的脚本,并确保该行中的字符...

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

在源文件中的外观与在调试器中的外观相同。

(至少,我试过你的脚本,只要我设置了字符编码,它就可以正常工作。)

【讨论】:

  • 是的,我确保 Javascript 和 HTML 以及 PHP 中的字符集都是正确的。不过我可能做错了什么。我认为这真的没什么大不了的,因为它将是一个主要是英文网站,如果人们真的想要前 255 个以外的特殊字符,他们可以了解所有关于 HTML 实体的知识并使用它们。不过,感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多