2012-01-08 61 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