2012-10-23 71 views
0

我使用PHP 5.2.17服務器+ MySQL 5.1.65。使用PHP 5.2.17編碼從MySQL獲取的PHP數組轉換爲JSON Unicode使用PHP 5.2.17

我有一個表格,其中包含的字段爲VARCHAR utf8_general_ci,我從此表中獲取記錄。

我這是怎麼打開的連接,沒有什麼特別的:

$link = mysql_connect('localhost', 'user', 'pass'); 

我需要與包含特殊字符的Unicode轉義JSON對象作出反應,我的意思是\u00e1符號。

$result = mysql_query(sprintf("select * from data t where t.domain='%s'", escape($domain)); 


    while($row = mysql_fetch_array($result)) { 
    $r[] = array(
     "tagid" => $row['DATAID'], 
     "name" => $row['NAME'] 
    ); 
    ) 

$encoded = json_encode($r); 
header('Content-type: application/json'); 
exit($encoded); 

我的問題是包含特殊字符(AE ..)返回爲在JSON響應null字段。

經過一段時間的谷歌搜索後,我看到PHP 5.2缺少json_encode參數,所以我需要手動unicode轉義名稱字段。但我怎麼能這樣做?

+0

你不能升級PHP 5.2的任何原因看,因爲它是。?宣佈生命週期將近*兩年前* – SDC

回答

2

json_encode()應該能夠很好地處理UTF-8數據--JSON僅僅是UTF-8,所以對於PHP而言,如果不具備UTF-8的這種特殊功能,將會很奇怪。

$array = array('key' => 'せ'); 

var_dump(json_encode($array)); // string(16) "{"key":"\u305b"}" 

你列整理可能是VARCHAR utf8_general_ci但是,這並不意味着字符編碼 UTF-8。你的表應該創建:

CREATE TABLE ... CHARACTER SET utf8 

而且你應該執行這個作爲你的第一個查詢:

SET NAMES utf8 
+0

謝謝,我所缺少的是SET NAMES utf8作爲第一個查詢。 – jabal

1

你可以自己實現json_encode,這應該沒有問題,或檢查其他人的代碼,如this one(當你發現需要時可以調整)。

1

實際上有沒有必要做這個轉義。更可能的是,您的輸入數據實際上不是有效的UTF-8。

更改表格的排序規則可能無法解決此問題。你絕對肯定它是有效的嗎?

另外:停止使用mysql_函數並使用PDO或mysqli。很久很久以前,mysql_函數已被棄用。

0

您可能還會發現base64_encode(數據)會使json_encode更可靠。在您的例子: 「標籤

"tagid" => base64_encode($row['DATAID']) 
... 

然後你json_encode整個事情當然,你必須在另一端BASE64_DECODE