我在关联数组中有以下json字符串:
[watch] => '{"tv":"Dexter's Labratory, \u05d1\u05d9\u05d3\u05d5\u05e8 \u05d9\u05e9\u05e8\u05d0\u05dc\u05d9 HOT, South Park, \u05e2\u05e1\u05e4\u05d5\u05e8, Teenage Mutant Ninja Turtles, Simpsons, The Samurai Pizza Cats, Dr. House, Futurama, House","movies":"Mufasa, Simba, \u05d7\u05d9\u05d9\u05dd \u05d1\u05e1\u05e8\u05d8, \u05e1\u05e8\u05d8\u05d9\u05dd \u05d7\u05d3\u05e9\u05d9\u05dd \u05d1\u05e7\u05d5\u05dc\u05e0\u05d5\u05e2, Future Shorts Israel, The Lion King"}'
当然它需要被转义,因为它包含像'inside(例如Dexter's Labratory)这样的字符。问题是在使用mysql_real_escape_string后输出为:
[watch] => \'{\"tv\":\"Dexter\'s Labratory, \\u05d1\\u05d9\\u05d3\\u05d5\\u05e8 \\u05d9\\u05e9\\u05e8\\u05d0\\u05dc\\u05d9 HOT, South Park, \\u05e2\\u05e1\\u05e4\\u05d5\\u05e8, Teenage Mutant Ninja Turtles, Simpsons, The Samurai Pizza Cats, Dr. House, Futurama, House\",\"movies\":\"Mufasa, Simba, \\u05d7\\u05d9\\u05d9\\u05dd \\u05d1\\u
它逃脱了大量不应该被转义的东西,特别是所有“字符(我非常肯定是json编码的一部分)使它无法查询。 什么是逃避json字符串的正确方法?我想我在这里错过了一些东西。
答案 0 :(得分:3)
您不应该使用already prepared
JSON字符串。
您应该使用json_encode();
函数从数组或对象创建JSON字符串。
它会自动转义特殊字符。或者您可以简单地在此函数的第三个参数中定义要逃避的内容。 Here是PHP DOC。
答案 1 :(得分:0)
将任何字符串转义为MySQL的SQL查询的正确方法是使用绑定参数。使用后面的mysqli_real_escape_string
小道和后面的mysql_real_escape_string
小道。
转义可以具有特殊含义的字符但不在上下文中 不会导致问题。
如果您想要清楚地查询数据,那么它不应该以JSON格式存储在数据库中。如果不从数据库中提取字段并对其进行解析,则无法访问JSON中的字段。
答案 2 :(得分:0)
这可能是因为你有希伯来字符。它需要解析。 看到这个问题:
JSON getting "name":"\u05d7\u05d1\u05e8\u05d4" for non-English