我想在json数组中添加一个元素。一切都很好,直到我在输入中应用了一个法语字符。(
$_POST['titre']
提交的值为"pr// 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"}]
正如您所看到的,在最后一次出现中,"
我的页面是在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语句将为您处理这类事情。