2012-02-14 96 views
0

所有冰雹知識的守護者,可能這個愚蠢的問題,請將您的身體健康,在對象中的特殊字符導致json_encode拋出錯誤

我已經闡述學習PHP,並作爲光榮的企業的一部分,我正在嘗試爲MySql數據庫創建一個RESTful API。我在PHP 5.3上使用Slim。到現在爲止還挺好。但我也住在丹麥,這是一個問題(顯然),因爲我們喜歡使用像'æ','ø'和'å'這樣的字符。

所以,當我問我的夢幻般的REST風格的玩意兒了一個對象而奇怪的字符,禮貌地回答說:

{ 
id: "3", 
name: "Wall - Plaster", 
price: "200", 
unit: "m2", 
tags: "1" 
} 

但是,唉。事情並不那麼好走,當有人問到與「æ」或任何其他奇怪的字符返回一個對象:

FOOL! json_encode(): Invalid UTF-8 sequence in argument 

函數utf8_encode()和Iconv.conv()適用於字符串和數組。但是,我可以使用什麼對象?有沒有什麼方法可以迭代我的方式通過一個對象,像foreach?

我的數據庫和表都是UTF8。

我的排外功能問題:

function getItem($id) { 
     $sql = "SELECT * FROM items WHERE id=:id"; 
     try { 
       $db = getConnection(); 
       $stmt = $db->prepare($sql); 
       $stmt->bindParam("id", $id); 
       $stmt->execute(); 
       $item = $stmt->fetchObject(); 
       $db = null; 
       echo json_encode($item); 
       //echo $item; 
       //print_r($item); 
      } catch(PDOException $e) { 
       echo '{"error":{"text":'. $e->getMessage() .'}}'; 
      } 
    }  

謝謝你,並可能處女涌向你攜帶發酵大麥的禮物。

回答

2

您的數據庫連接可能是ISO-8859-1--它是mySQL連接的默認編碼。因此,即使數據庫是UTF-8,您也會獲得ISO-8859-1字符數據。

請參閱this question瞭解更改PDO連接字符集的各種(永久和每連接)方法。

+2

主席先生,你是一位學者,肯定是偉大格式的紳士!我在我的連接選項中添加了PDO :: MYSQL_ATTR_INIT_COMMAND =>'SET NAMES utf8',現在'æ','ø'和'å'不再被視爲二等公民。我最深切的感激之情。 – playeren 2012-02-14 18:19:26

+0

這也解決了我的問題(並從我創建一個重複的問題保存)。非常感謝你! – acedanger 2013-05-17 14:01:53