log

日記です

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脆弱性対策のため、文字をエスケープするのは当たり前みたい