2017-09-28 7 views
1

mysqlのTEXTフィールドに保存されているjsonに問題があります。問題は、 '(一重引用符)を使用してjsonを保存してから保存するまでです。スラッシュは次のように追加されます\ '\\' \\」などJson from mysql breaks

はその後、いくつかの文字が正しくエンコードされません\ u00e0

<div class="wpbs-calendar-legend" data-info="{&quot;default&quot;:{&quot;name&quot;:{&quot;default&quot;:&quot;Available&quot;,&quot;hr&quot;:&quot;Slobodno&quot;,&quot;cs&quot;:&quot;Volno&quot;,&quot;da&quot;:&quot;Ledigt&quot;,&quot;nl&quot;:&quot;Vrij&quot;,&quot;en&quot;:&quot;Available&quot;,&quot;fr&quot;:&quot;Libre&quot;,&quot;de&quot;:&quot;Frei&quot;,&quot;hu&quot;:&quot;Szabad&quot;,&quot;it&quot;:&quot;Libero&quot;,&quot;ro&quot;:&quot;Disponobil&quot;,&quot;ru&quot;:&quot;\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e&quot;,&quot;sk&quot;:&quot;Vo\u013en\u00fd&quot;,&quot;es&quot;:&quot;Libre&quot;,&quot;sv&quot;:&quot;Ledigt&quot;,&quot;uk&quot;:&quot;B\u0456\u043b\u044c\u043d\u043e&quot;,&quot;no&quot;:&quot;&quot;},&quot;color&quot;:&quot;#f1ffcc&quot;,&quot;splitColor&quot;:false,&quot;bookable&quot;:&quot;yes&quot;,&quot;auto-pending&quot;:&quot;no&quot;,&quot;sync&quot;:&quot;no&quot;},&quot;1&quot;:{&quot;name&quot;:{&quot;default&quot;:&quot;Booked&quot;,&quot;hr&quot;:&quot;Zauzeto&quot;,&quot;cs&quot;:&quot;Obsazeno&quot;,&quot;da&quot;:&quot;Booket&quot;,&quot;nl&quot;:&quot;Bezet&quot;,&quot;en&quot;:&quot;Booked&quot;,&quot;fr&quot;:&quot;Occup\u00e9&quot;,&quot;de&quot;:&quot;Belegt&quot;,&quot;hu&quot;:&quot;Foglalt&quot;,&quot;it&quot;:&quot;Prenotato&quot;,&quot;ro&quot;:&quot;Rezervat&quot;,&quot;ru&quot;:&quot;\u0417\u0430\u043d\u044f\u0442\u043e&quot;,&quot;sk&quot;:&quot;Obsaden\u00fd&quot;,&quot;es&quot;:&quot;Reservado&quot;,&quot;sv&quot;:&quot;Bokat&quot;,&quot;uk&quot;:&quot;\u0417\u0430\u0439\u043d\u044f\u0442\u043e&quot;,&quot;no&quot;:&quot;&quot;},&quot;color&quot;:&quot;#ff524c&quot;,&quot;splitColor&quot;:false,&quot;bookable&quot;:false,&quot;auto-pending&quot;:&quot;yes&quot;,&quot;sync&quot;:&quot;yes&quot;},&quot;2&quot;:{&quot;name&quot;:{&quot;en&quot;:&quot;>14H&quot;,&quot;nl&quot;:&quot;&quot;,&quot;et&quot;:&quot;&quot;,&quot;fi&quot;:&quot;&quot;,&quot;fr&quot;:&quot;D\u00e8s 14H&quot;,&quot;de&quot;:&quot;&quot;,&quot;pt&quot;:&quot;&quot;,&quot;ro&quot;:&quot;&quot;,&quot;default&quot;:&quot;D\u00e8s 14H&quot;},&quot;color&quot;:&quot;#f1ffcc&quot;,&quot;splitColor&quot;:&quot;#ff524c&quot;,&quot;bookable&quot;:&quot;yes&quot;,&quot;hide&quot;:false,&quot;auto-pending&quot;:&quot;no&quot;,&quot;sync&quot;:&quot;no&quot;},&quot;3&quot;:{&quot;name&quot;:{&quot;en&quot;:&quot;<12H&quot;,&quot;nl&quot;:&quot;&quot;,&quot;et&quot;:&quot;&quot;,&quot;fi&quot;:&quot;&quot;,&quot;fr&quot;:&quot;Jusqu\\" \u00e0="" 10h","de":"","pt":"","ro":"","default":"jusqu\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\u00e0="" 10h"},"color":"#ff524c","splitcolor":"#f1ffcc","bookable":"yes","hide":false,"auto-pending":"no","sync":"no"}}'=""></div> 

と私のinsepctウィンドウで

は、次のようになります。

developer console

私はWordPressを使用していますので、このjson_encoded文字列はupdate_optionを使用してデータベースに保存されます。私は、update_optionでjsonでエンコードされた文字列をstripslashes()しようとしましたが、それは問題を解決しませんでした。

誰かが私をここで助けることができますか?

ありがとうございます!

+0

データ情報がhtmlentityですコード化される。 – Daniel

答えて

1

あなたのSQL挿入がエスケープしているようです - 非常に正しく - データ。

SQLからデータを取得する必要がある場合は、エスケープをstripslashesを使用して削除する必要があります。

変数が$jsonResultの場合は、stripslashes($jsonResult)としてください。

+0

私はすでにstripslashesを試していますが、json_encoded文字列がWordPressのupdate_option関数を使って保存されているため、私の問題は解決していません(wordpressを使用することを反映する質問を編集する必要があります) –

+0

エスケープはそれほど機能しません。スラッシュが追加され、データベースに送信された結果、スラッシュはSQLパーサによって消費され、データベースに格納されたデータには含まれません。 – Quentin

1

いいえ、htmlentitiesではなく、stripslashesです。あなたはjson_encode()からJSONを取得した場合、「ユニコード」エンコーディングを避けるために、追加のパラメータを使用します。

$x = json_encode($s, JSON_UNESCAPED_UNICODE); 

参照 http://php.net/manual/en/function.json-encode.php での例#2は、(PHP 5.4.0が必要です)