情况是这样的:
我的程序接受用户输入到表单中的输入,并使用 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
它会像这样转义并存储在数据库中:I\'m
一旦从数据库中检索到,JSON 编码的字符串将如下所示:
<script> var jsonData = '{"fname":"Daniel","about":"i\\'m a nerd"}';</script>
虽然'
被转义了,但似乎破坏了JSON。
我看到有人发布了查找/替换样式的解决方法,但我宁愿避免这种方法。
肯定有某种方法可以处理这个问题,还是我以某种方式错误地初始化了 JSON 对象?
非常感谢任何帮助,如需更多信息,请询问 :)
最佳答案
解决问题的最简单方法是在 JS 中省略引号:
echo "<script> var jsonData = " . json_encode($profileData) . ";</script>";
这将导致
<script> var jsonData = {"fname":"Daniel","about":"i\\'m a nerd"};</script>
那么jsonData
就已经是一个对象了,不用解析了。尽管那时转义可能有点不对劲。
关于php - 存在撇号时使用 json_encode 破坏 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19263108/