正则表达式搞砸了php中的json_decode

时间:2012-02-22 19:26:28

标签: php json

当我把它放入json检查器时,它是一个有效的json,但是php中的json_decode给出了一个解码错误。 json partial:

"regex":{
    "validator":"Regex",
    "options":{
        "pattern":"\/^[a-zA-Z\\.\\- ]+$\/",
        "messages":"Please use letters, spaces, period and dashes only"
    }
}

我看了Regular expression messing up json_decode();,但这对我没有帮助。

谢谢!

以下是整个json:

1 个答案:

答案 0 :(得分:2)

这很有效。

<?php
error_reporting(E_ALL);

$json = '{"regex":{
    "validator":"Regex",
    "options":{
        "pattern":"\\/^[a-zA-Z\\\\.\\\\- ]+$\\/",
        "messages":"Please use letters, spaces, period and dashes only"
    }
}
}';

var_dump(json_decode($json, true));

?>

注意整个JSON字符串是用{}封装的,并且还注意到所有反斜杠都是用另一个反斜杠转义的(所以正则表达式需要\我们有\\)。这很完美。

注意更新:

只需str_replace("\\", "\\\\", $json);,您就可以了。此外,如果以表格提交,应该没问题。我刚刚通过HTML表单提交了您的整个JSON字符串,并将其直接发送到json_decode(没有转义)并且它有效。这是因为浏览器已经转义了反斜杠。很长一段时间我们没有在PHP中定义字符串,它将被转义(至少反斜杠)