WordPressでPOSTするとPOSTデータ中の「"」ダブルクオートがエスケープされる

WordPressのとある固定ページにJSONデータをPOSTし、json_decodeしようとしているがエラーが発生してしまう。

json_last_errorによると、4(JSON_ERROR_SYNTAX)が発生している。

JSON形式の文字列が不正なようだ。

POSTされたデータを確認してみると、「"」ダブルクオートが「"」にエスケープされているようだ。

Array
(
    [aa] => bb
    [_wpnonce] => dcca096cca
    [_wp_http_referer] => /test/public_html/item/test.html?aa
    [jsonstring] => {\"permalink\":\"http:\\/\\/192.168.1.10\\/test\\/public_html\\/item\\/test.html\",\"image_l\":[\"\\/test\\/public_html\\/ms\\/wp-content\\/uploads\\/2015\\/04\\/test-1024x1024.jpg\",1024,1024,true],\"usces_the_itemSkuDisp\":\"\",\"cart_itemcode\":\"test-A\",\"itemPrice\":\"3,500\"}
)

なぜ今どき、 magic_quotes_gpcの挙動が起こるのだろうかとおもったら、WordPressではPHPのバージョンやmagic_quotes_gpcの設定に関わらず、magic quotesするらしい。

stripslashes_deep  https://codex.wordpress.org/Function_Reference/stripslashes_deep

WordPress ignores the built in php magic quotes setting and the value of get_magic_quotes_gpc() and will always add magic quotes (even after the feature is removed from PHP in 5.4).

該当のデータをstripslashesするか、stripslashes_deep_post($_POST) することで元のデータに戻り、json_decodeが成功した。

解決まで時間かかりました…