【问题标题】:Regex messing up json_decode in php正则表达式在 php 中弄乱了 json_decode
【发布时间】:2012-02-22 19:26:28
【问题描述】:

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

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

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

谢谢!

这是整个json:

【问题讨论】:

  • json_decode 得到哪个错误代码?
  • json_decode() 返回空值。如果我取出那个模式,它可以很好地解码。
  • 如果json_decode 失败,请参阅json_last_error 以获取错误代码/消息。
  • I 将它放入 json 检查器时,我得到一个错误...
  • 它只是整个 json 的一部分,但它是问题区域。如果你把 {} 括起来,我会从 json checker 得到有效的 json。

标签: php json


【解决方案1】:

这行得通。

<?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 中定义字符串,它就会被转义(至少反斜杠)

【讨论】:

  • \\/ 在 PHP 中可以写成\/ 的单引号字符串。
  • 双反斜杠和四反斜杠解决了我的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-03-06
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多