2013-07-09 36 views
0

我編寫了一個簡單的php文件(使用GET方法調用),返回一個json文件。代碼如下位置:Json編碼爲某些字符返回空值

$q=$_GET["q"]; 

$query = "SELECT name, surname, data, session from users where id= ?"; 
     $stmt = $connectiondb->prepare($query); 
     $stmt->bind_param('i', $id); 
     $id= $q; 
     $stmt->execute(); 
     $stmt->bind_result($name,$surname,$data,$session); 
     $stmt->fetch(); 
     $stmt->close(); 

     $array = array("name" => $name, "surname" => $surname,"data" => $data, "session" => $session); 
     echo json_encode($array); 

在我的數據庫(MySQL的)的表中的字段「會話」以這種方式definied:

Type : text 
Collation: utf8_general_ci 

嘗試啓動腳本選擇從一個排表「用戶」,其中session的值爲"last session",結果如下:

{"name":"John","surname":"Mayer","date":"2013-01-01","session":"last session"} 

並且這很好。但是,當我在表中提交會議的值爲"1° session"腳本生成以下的輸出:

{"name":"Mike","surname":"Stern","date":"2013-04-02","session":null} 

(你可以海會議是在JSON輸出空)

我覺得現在的問題是產生字符°。我怎麼解決這個問題?

編輯:

我嘗試添加代碼的PHP的下面一行:

$session = utf8_decode($session); 

,我得到這樣的:

{"name":"Mike","surname":"Stern","date":"2013-04-02","session":"1? session"} 

我已經不再是空值,但°被翻譯成?字符。

+0

你能證明你的表的內容返回通過'SELECT * FROM users'? –

+0

@SylvainLeroux如果我打印變量php會話,它會返回我「1°會話」 – GVillani82

+0

@SylvainLeroux我相信這是正確的方法。變量php都是正確創建的。看這裏http://php.net/manual/it/mysqli-stmt.bind-param.php bind_param的使用 – GVillani82

回答

1

正如this post

建議我加入這一行:

$connectiondb->set_charset('utf8'); 

結果如下:

{"name":"Mike","surname":"Stern","date":"2013-04-02","session":"1\u00b0 session"} 

這似乎是一個問題,因爲我想°,而不是相對UTF8碼。

,但由於PHP文件被稱爲AJAX形式,我只是設置好的

scriptCharset: "utf-8" 

,現在我可以參考data.session並獲得"1° session"

+1

'scriptCharset'不應該做任何事情,因爲字符不是UTF-8編碼!它* JSON轉義*。如果您只是使用適當的JSON解析器解析JSON,它將被解析並恢復原始字符。 – deceze

+0

呃,好的,謝謝你,@deceze – GVillani82