%22而不是引号 - chrome + firefox的不同行为

时间:2016-03-31 12:06:05

标签: php json google-chrome firefox

我有以下功能:

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(),除非没有其他选项。有人能解释为什么会发生这种情况吗?它是由于浏览器的渲染引擎吗?

0 个答案:

没有答案