我有一个 PHP 脚本,它接受来自其他服务器的 JSON 格式的帖子。有时外部服务器启用了魔术引号,所以为了安全起见,我通过 stripslashes() 传递它。但是,当发布的数据也有引号字符时,我遇到了问题。这也被远程服务器转义,然后我的服务器上的 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 进行处理。
我考虑了一个正则表达式,仅当它们出现在括号 [] 之间时才删除反斜杠,但这似乎很笨拙。是否有更优雅的解决方案来仅删除某些斜线?