2012-07-30 167 views
1

我有一個關聯數組裏面以下JSON字符串:mysql_real_escape_string和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"}' 

它需要轉義,因爲它包含了諸如「內的字符(例如德克斯特的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 

它會把東西一shitload不應該逃脫,特別是所有的「字符(我敢肯定是JSON編碼的一部分)變得無法可查詢。 什麼是逃避一個JSON字符串正確方法是什麼?我想我在這裏失去了一些東西。

回答

2

您不應該使用already prepared JSON字符串。

您應該使用json_encode();函數從數組或對象創建JSON字符串。

它會自動轉義特殊字符。或者,您可以簡單地在此函數的第三個參數中定義要逃脫的內容。 Here是PHP的DOC。

+0

我做了以下你的建議了一些變化,它的工作 – Tiger 2012-07-30 16:03:24

0

正確的方法來逃避任何串放入SQL查詢MySQL是使用使用mysqli_real_escape_string落後和mysql_real_escape_string落後

轉義字符可以有特殊含義,但在上下文中不會導致問題。

如果你想查詢數據健全,那麼它不應該以JSON格式存儲在數據庫中。如果不從數據庫中提取並解析它,則無法訪問JSON中的字段。