postで受け取った文字列のエスケープ文字が邪魔な時
stripcslashes関数でエスケープ文字の削除
$str = stripslashes($_POST['data']);
JSONのデータをPHPに投げたけど、ダブルクオーテーションの前にエスケープ文字のバックスラッシュがついてjson_decodeができない!ってゆー問題に出くわした。
なんかご丁寧にPHPがエスケープ文字付けてくれているみたい。
邪魔な時は
stripcslashes関数
で\を削除!
例.JSONデータをpostでPHPに送ると?
JavaScriptから送るJSONデータはこう。
{"1": {"stopid":"280040", "lat":"26.203968985943952", "lng":"127.72605031728744", "detailid":"20212"}, "2": {"stopid":"280046", "lat":"26.205160223311830", "lng":"127.72395014762878", "detailid":"20213"}, "3": {"stopid":"280041", "lat":"26.206084326328610", "lng":"127.72462874650955", "detailid":"20214"} }
でも、phpで受け取ったデータをechoすると?
echo $_POST["json_data"];
{\"1\": {\"stopid\":\"280040\", \"lat\":\"26.203968985943952\", \"lng\":\"127.72605031728744\", \"memo\":\"\\u8d77\\u70b9\", \"detailid\":\"20212\"}, \"2\": {\"stopid\":\"280046\", \"lat\":\"26.205160223311830\", \"lng\":\"127.72395014762878\", \"detailid\":\"20213\"}, \"3\": {\"stopid\":\"280041\", \"lat\":\"26.206084326328610\", \"lng\":\"127.72462874650955\", \"detailid\":\"20214\"} }
こんなんなっちゃう。
php.iniでエスケープ文字をつけるか付けないか設定できるみたい。
追記
XSS脆弱性対策のため、文字をエスケープするのは当たり前みたい