Php json_解码:来自HEREDOC字符串的有效json的“语法错误”

Php json_解码:来自HEREDOC字符串的有效json的“语法错误”,php,json,heredoc,Php,Json,Heredoc,我有下面的JSON代码。根据或JSON验证程序,它是有效的JSON { 模式:{ 电子邮件:/[a-z0-9.\%+-]+@[a-z0-9.-]+\.[a-z]{2,}/i, 电话::::??????????::::?????????????????????????????????????????????????????????????:0 0?????:0 0 0???????:0 0???????????????????????????????????????????????????????

我有下面的JSON代码。根据或JSON验证程序,它是有效的JSON

{ 模式:{ 电子邮件:/[a-z0-9.\%+-]+@[a-z0-9.-]+\.[a-z]{2,}/i, 电话::::??????????::::?????????????????????????????????????????????????????????????:0 0?????:0 0 0???????:0 0????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????\\d{3,4}\\?:\\d{2}\\?[\\s-]?\\d{4}[\\s-]?\\d{4}:[\\s-]:x |分机?\\\\\d{3,4}/ } } 然而,当我尝试在PHP中使用json_decode函数进行解码时,我得到了一个“语法错误”。以下是我的PHP代码:


const JSON_CONFIG=反斜杠充当PHP转义序列,而不是JSON转义序列。要防止PHP转义,请将您的heredoc开始标记用单引号括起来:

const JSON_CONFIG = <<<'JSON'
{
  "patterns": {
    "email": "/[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}/i",
    "phone": "/(?:(?:\\(?(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)44\\)?[\\s-]?(?:\\(?0\\)?[\\s-]?)?)|(?:\\(?0))(?:(?:\\d{5}\\)?[\\s-]?\\d{4,5})|(?:\\d{4}\\)?[\\s-]?(?:\\d{5}|\\d{3}[\\s-]?\\d{3}))|(?:\\d{3}\\)?[\\s-]?\\d{3}[\\s-]?\\d{3,4})|(?:\\d{2}\\)?[\\s-]?\\d{4}[\\s-]?\\d{4}))(?:[\\s-]?(?:x|ext\\.?|\\#)\\d{3,4})?/"
  }
}
JSON;

var_dump(JSON_CONFIG);
echo PHP_EOL;

$config = json_decode(mb_convert_encoding(JSON_CONFIG, "UTF-8"), true); // Tried called trim but it made no difference
echo 'json_last_error_msg() => ' . json_last_error_msg() . PHP_EOL;
echo 'json_last_error() => ' . json_last_error() . PHP_EOL;
print_r($config);

回复:

将HEREDOC语句从