3

我在关联数组中有以下 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"}'

当然它需要被转义,因为它包含像'里面的字符(例如德克斯特的实验室)。问题是在其上使用 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 字符串的正确方法是什么?我想我我在这里遗漏了一些东西。

4

3 回答 3

3

你不应该使用already preparedJSON 字符串。

您应该使用json_encode();函数从数组或对象创建 JSON 字符串。

它会自动转义特殊字符。或者您可以简单地在此函数的第三个参数中定义要转义的内容。是 PHP 文档。

于 2012-07-30T12:25:40.877 回答
0

转义任何字符串以放入 MySQL 的 SQL 查询的正确方法是使用绑定参数。使用mysqli_real_escape_string后面的小径和后面的mysql_real_escape_string小径。

转义可能具有特殊含义但在上下文中没有的字符不会导致问题。

如果你想健全地查询数据,那么它不应该以 JSON 格式存储在数据库中。如果不从数据库中提取并解析它,您将无法访问 JSON 中的字段。

于 2012-07-30T12:18:52.823 回答
0

这可能是因为您拥有的希伯来语字符。它需要解析。看到这个问题:

JSON 获取非英语的 "name":"\u05d7\u05d1\u05e8\u05d4"

于 2012-07-30T13:11:31.177 回答