JSON 形式で他のサーバーからの投稿を受け入れる PHP スクリプトがあります。外部サーバーでマジック クォートが有効になっている場合があるため、安全のために stripslashes() を介して渡します。ただし、投稿されるデータにも引用符があると問題が発生します。これもリモートサーバーによってエスケープされ、サーバー上のストリップスラッシュも誤ってストリップされ、JSON が壊れます。
たとえば、次の JSON を簡単に受け渡しできます。
stuff = {"items":["item1","item2"],
"urls":["url1","url2"],
"pics":["pic1","pic2"]};
ただし、これは壊れます:
stuff = {"items":["item_including_quotes1","item_including_quotes2"],
"urls":["url1","url2"],
"pics":["pic1","pic2"]};
リモート配列の値を制御することはできず、一重引用符と二重引用符を含めることができます。私は、送信の準備をどのように行うかを制御できます。現在、JavaScript は次のようになっています。
encodeURIComponent(JSON.stringify(stuff));
PHPは次のようになります。
json_decode(stripslashes(urldecode($_POST["stuff"])));
このデータは javascript JSON.stringify と encodeuricompnent で投稿され、PHP json_decode と urldecode で処理されます。
バックスラッシュが角かっこ [] の間に表示される場合にのみバックスラッシュを削除する正規表現を考えましたが、これはぎこちないようです。特定のスラッシュのみを削除するためのよりエレガントなソリューションはありますか?