1

情况如下:

我的程序接受用户在表单中输入的输入,并使用 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 对象?

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

4

3 回答 3

2

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

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

这将导致

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

然后jsonData将已经是一个对象并且不必被解析。虽然逃跑可能有点过时了。

于 2013-10-09T04:33:26.640 回答
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>";
于 2013-10-09T04:30:18.763 回答
0

编码 JSON 时使用 JSON_HEX_APOS 参数

json_encode($profileData, JSON_HEX_APOS);

这会将单引号变成只有 JSON 才能理解的特殊转义值

于 2013-10-09T05:16:15.447 回答