情况如下:
我的程序将用户输入的输入接受到表单中,并使用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对象?
任何帮助非常感谢,需要更多信息只需询问:)
答案 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理解的特殊转义值