当存在叛逆者时,使用json_encode破坏JSON对象

时间:2013-10-09 04:25:42

标签: php jquery mysql json prepared-statement

情况如下:

我的程序将用户输入的输入接受到表单中,并使用PHP的PDO和Prepared Statements将其保存在MYSQL数据库中。


数据通过AJAX调用检索,并使用json_encode编码为JSON,如下所示:

echo "<script> var jsonData = '". json_encode($profileData) . "';</script>";


然后使用JQuery解析:

var Profile = jQuery.parseJSON(jsonData);

如果用户输入'字符,就可以了。

即。如果用户输入单词

  


它将被转义并存储在数据库中,如下所示:I\'m


从数据库中检索后,JSON编码的字符串将如下所示:

<script> var jsonData = '{"fname":"Daniel","about":"i\\'m a nerd"}';</script>


虽然'已被转义,但似乎打破了JSON。

我见过有人发布查找/替换样式的解决方法,但我更愿意避免使用这种方法。

当然有一些方法可以解决这个问题,或者我是否以某种方式错误地初始化JSON对象?

任何帮助非常感谢,需要更多信息只需询问:)

3 个答案:

答案 0 :(得分:2)

解决问题的最简单方法是省略JS中的引号:

echo "<script> var jsonData = " . json_encode($profileData) . ";</script>";

将导致

<script> var jsonData = {"fname":"Daniel","about":"i\\'m a nerd"};</script>

然后jsonData已经是一个对象,不需要解析。虽然逃跑可能有点偏离。

答案 1 :(得分:0)

  

从数据库中检索后,JSON编码的字符串将如下所示:

<script> var jsonData = '{"fname":"Daniel","about":"i\\'m a nerd"}';</script>
     

虽然'被转义,但似乎打破了JSON。

请注意,JSON关注的是转义反斜杠。因此,报价不会被转义 - 您仍然必须这样做,以免弄乱您的报价。

echo "<script> var jsonData = '". json_encode($profileData).replace(/'/g, "\\'" . "';</script>";

答案 2 :(得分:0)

在对JSON进行编码时使用JSON_HEX_APOS参数

json_encode($profileData, JSON_HEX_APOS);

这会将单引号转换为只有JSON理解的特殊转义值