在我的脚本中,我使用 cURL 发送数据,并启用了 CURLOPT_RETURNTRANSFER。响应是 json 编码的数据。当我尝试 json_decode 时,它返回 null。然后我发现响应在字符串()的开头包含 utf-8 BOM 符号。
有一些实验:
$data = $data = curl_exec($ch);
echo $data;
结果是 {"field_1":"text_1","field_2":"text_2","field_3":"text_3"}
$data = $data = curl_exec($ch);
echo mb_detect_encoding($data);
结果 - UTF-8
$data = $data = curl_exec($ch);
echo mb_convert_encoding($data, 'UTF-8', mb_detect_encoding($data));
// identical to echo mb_convert_encoding($data, 'UTF-8', 'UTF-8');
结果 - {"field_1":"text_1","field_2":"text_2","field_3":"text_3"}
有帮助的一件事是删除前 3 个符号:
if (substr($data, 0, 3) == pack('CCC', 239, 187, 191)) {
$data = substr($data, 3);
}
但是,如果会有另一个 BOM 怎么办?所以问题是:如何检测 cURL 响应的正确编码?或者如何检测到什么 BOM?或者也许如何用 BOM 转换响应?