2010-11-12 28 views
0

我有一個具有國際字符的字符串數組。
當我將它保存在數據庫中時,我放鬆了反斜槓?爲什麼?PHP json_encode失去我的UTF-8轉義?

$descr_arr = array("héééllo","world"); 
$js_encoded = json_encode($descr_arr); 
print $js_encoded; // "[\"h\u00e9\u00e9\u00e9llo\",\"world\"]" 

$sql_query = "UPDATE test_table SET description = '$js_encoded' WHERE id = 0"; 
$sql_res = mysql_query($sql_query); 

// in the description field in the database I find: 
// ["hu00e9u00e9u00e9llo","world"] 

回答

2

你沒有逃脫你的數據庫輸入。永遠逃脫!

這裏有一種方法

$sql_query = "UPDATE test_table SET description = '". 
    mysql_real_escape_string($js_encoded). 
    "' WHERE id = 0"; 

更重要的是,使用數據庫的包裝像PDO和ADODB,這將需要爲你的逃避的照顧。它看起來像這樣:

$db->Execute("UPDATE test_table SET description =? where id=?", 
    array($js_encoded, $id)); 
+0

謝謝保羅,也爲PDO和ADODb的建議,現在讀它們,乾杯 – FFish 2010-11-12 19:27:51