2010-11-12 6 views
0

J'ai un tableau avec des chaînes avec des caractères internationaux.
Lorsque je sauvegarde ceci dans la base de données, je perds les barres obliques inverses? Pourquoi?PHP json_encode perd mes échappements 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"] 

Répondre

2

Vous n'avez pas échappé à vos entrées de base de données. Toujours échapper!

est ici une façon

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

Mieux encore, utilisez un emballage de base de données comme AOP ou Adodb, qui prendrait soin de vous échapper. Il ressemblerait à quelque chose comme ceci:

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

merci Paul, aussi pour les suggestions AOP et ADODb, en les lisant maintenant, acclame – FFish

Questions connexes