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が成功した。
解決まで時間かかりました…