mysql_real_escape_string和json

时间:2012-07-30 12:11:48

标签: php mysql json

我在关联数组中有以下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字符串的正确方法?我想我在这里错过了一些东西。

3 个答案:

答案 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