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"}'

もちろん、内部に ' などの文字が含まれているため、エスケープする必要があります (例: 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 文字列をエスケープする正しい方法は何ですか?ここに何かが欠けています。

4

3 に答える 3

3

already preparedJSON 文字列は使用しないでください。

関数を使用json_encode();して、配列またはオブジェクトから JSON 文字列を作成する必要があります。

特殊文字を自動的にエスケープします。または、この関数の 3 番目の引数で何をエスケープするかを単純に定義することもできます。これがPHP DOCです

于 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 に答える