我有以下功能:
public function insertProfile() {
$values = $_POST;
// unsanitized, don't do this ever. But since everything has to be done quickly... you know
$name = $values['name'];
$creditornr = $values['creditornr'];
$struct = $values['struct'];
$serialized = json_encode($struct);
$cleaned = str_replace('""', '"', stripslashes($serialized));
var_dump($cleaned);
die();
}
是的,我知道,永远不要相信用户输入..但这是另一个故事。
var_dumping $cleaned
在firefox中输出:
string(51)“{”0“:”sku“,”1“:”abc“,”2“:”def“,”3“:” - “,”4“:”foo“,” 5“:”bar“}”
这正是格式,我希望它具有。但是,当我在Chrome中使用我的脚本时,会产生以下输出:
string(87)“{”%220%22“:”sku“,”%221%22“:”abc“,”%222%22“:”def“,”%223%22“:” - “ ”%224%22“: ”foo“ 的, ”%225%22“: ”酒吧“}”
我发现,%22
是双引号("
)的ASCII代码。但是,由于输出稍后会在该脚本中写入数据库,因此如果在chrome中使用,则会写入错误的JSON结构。
为什么会这样,我怎么能摆脱它呢?如果用户使用chrome,我不想使用str_replace()
,除非没有其他选项。有人能解释为什么会发生这种情况吗?它是由于浏览器的渲染引擎吗?