json_encode返回NULL,json_last_error_msg给出"控制字符错误,可能编码错误"

Dea*_* Or 5 php json

读入我的编辑器时,该文件看起来很好.

$file = file_get_contents('path/to/file.json');
$json =  json_decode($file, true);
var_dump($json); // null
echo json_last_error_msg(); //Control character error, possibly incorrectly encoded
Run Code Online (Sandbox Code Playgroud)

关于此错误消息的含义并不多.

jk2*_*k2K 10

您可以删除控制字符,PCRE支持字符类的POSIX表示法[:cntrl:]

$json = preg_replace('/[[:cntrl:]]/', '', $json);
$json = json_decode($json, true);
var_dump($json);
echo json_last_error_msg();
Run Code Online (Sandbox Code Playgroud)

  • 一般来说,这是错误的做法。想象一下您有以下字符串:“hello\nworld”,其中 \n 是未转义的 (0x0a) 字符。`preg_replace` 将修复它,尽管您仍将使用“helloworld”。应该修复生成 json 编码字符串的代码。 (4认同)