さて、最近のプロジェクトで奇妙な要件がありました。CMSとキャッシュの制限を回避するために、いくつかのAJAX呼び出しを行った後、JSONオブジェクトをCookieに保存して更新する必要がありました。後でユーザーがプロセスを完了した場合、このCookieに保存されている情報は、以前に行われた選択を識別するために使用されます。完了には、数分から数週間かかる場合があります。実質的に時間制限のないページ変換。
$ _COOKIEグローバルからエンコードされたJSON文字列を抽出しようとすると、JSON構文エラーが発生し始めました(実際には、その時点より前にバグが発生しましたが、それが何が起こっているのかを理解し始めたときです)。Javascriptに組み込まれているJSON.stringifyを使用してCookie値を設定し、PHPではjson_decodeを使用していました。
どうやら、PHPは$ _COOKIEから出てくる文字列値の引用符をエスケープします。これにより、JSON構文エラーが発生し、その後にカスケード効果が発生しました。PHPJSON関数または$_COOKIEドキュメントに言及はありませんでした。'\'でpreg_replaceを実行してそれらを削除することになり、'動作します'。
それはハッキーな回避策のようです。足りないものはありましたか?将来これを行うためのより良い方法はありますか?
値とjson_last_error()をエコーする場合:
$ cookie = $ _COOKIE ['cookie_name']; => {\ "suffix \":\ "general \" ...}
$ cookie = json_decode($ cookie、true); =>構文エラー:NULL
$ cookie = preg_replace('/ \\ /'、 ""、$ cookie); => {"suffix": "general" ...}
$ cookie = json_decode($ cookie、true); =>エラーなし:ARRAY