2012-01-08 36 views
2

我有以下的PHP脚本由AJAX调用:AJAX请求返回Unicode字符为问号

<?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) "?????" 
} 

我缺少什么,让Unicode字符通过AJAX传递?

编辑:我添加一些代码来告诉我的原岗位数据是什么,它似乎像?????是那里的原始数据后,即。 Unicode甚至没有把它送到服务器。

+0

你tryed函数utf8_encode? – 2012-01-08 02:43:51

+0

是的,我尝试过和没有。它没有任何区别,但... – 2012-01-08 02:45:26

+0

如果您直接调用文件而不使用AJAX,它会输出相同的问号吗? – 2012-01-08 04:16:16

回答

0

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

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

尝试寻找在Firebug的脚本,并确保该行的字符...

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

看起来一样在源文件中,因为它们在调试器做的。

(至少,我想你的脚本,它对于我来说,只要我设置的字符编码工作的罚款。)

+0

是的,我确保字符集在Javascript中都是正确的并在HTML中,以及PHP。虽然我可能做错了。我认为这不是什么大不了的事,因为它主要是英文网站,如果人们真的*想要在第255个字以外的特殊字符,他们可以学习所有关于HTML实体并使用它们。不过谢谢你的回答。 – 2012-01-08 05:13:52