PHP json_encode won't add backslash before french charac


PHP json_encode won't add backslash before french character?

我想在json数组中添加一个元素。一切都很好,直到我在输入中应用了一个法语字符。(等)。它们被正确编码,但是在"u00e9"

之前没有添加反斜杠。下面是我在数组中添加一行的代码:(本例中,$_POST['titre']提交的值为"pr sidente")

// 1. Get original json from my db
$res=mysql_query("SELECT * FROM produits WHERE p_id=".$id);
$b=mysql_fetch_assoc($res);
// 2. json_decode the result to put in a array  
$array_before_json = json_decode($b['p_images'], true);
// 3. Put our submited value in an array
$newImage = array("titre" => $_POST['titre'], "file" => $_FILES['files']['name'][0]);
array_push($array_before_json,$newImage);
$json_encode = json_encode($array_before_json);
// 4. Re-insert array in bd 
$res=mysql_query("UPDATE produits SET p_images='".$json_encode."' WHERE p_id=".$id);

这是现在在我的数据库新的json:(4图像)

[{"titre":"Image #2","file":"1149124_65352813.jpg"},{"titre":"Image #3","file":"333047.jpg"},{"titre":"Titre de ma photo","file":"14.jpg"},{"titre":"Pru00e9sidente","file":"16.jpg"}]

正如您所看到的,在最后一次出现中,""没有正确编码,它应该在u00e9之前有一个反斜杠…

我的页面是在UTF-8,但我不知道是什么问题…

SQL查询中的反斜杠具有特殊含义。您需要准备好要正确插入到查询中的值,以便保留所有特殊字符,如反斜杠。在您的情况下,您需要在$json_encode上使用mysql_real_escape_string。但是,您应该切换到支持预处理语句的现代MySQL API并使用它们。

参见如何在PHP中防止SQL注入?和伟大的逃避主义(或:你需要知道的在文本中使用文本)。

经典SQL注入。的

你的查询看起来像:

UPDATE produits SET p_images='blah blah blah Pr'u00e9sidente blah' ...

MySQL对'u没有任何特殊意义,因此反斜杠"脱落"无用。如果它是'n00e9,那么你会得到一个换行符,给你一个想法。

简单的回答:过滤你的输入,,即使它来自一个可信的来源(例如:您的代码(但在本例中不是)。或者更好的是,使用PDO - prepared语句将为您处理这类事情。